标签: snowflake-cloud-data-platform

如何根据另一列的聚合获得一列对应的值?

我正在将一些 PostgreSQL 查询迁移到 Snowflake,并且正在努力复制以下查询:

WITH test_table(col1, col2, col3, col4) AS (
    VALUES 
        (1, 1, 7, 5),
        (1, 1, 6, 4),
        (1, 2, 1, 4),
        (1, 2, 2, 5),
        (1, 2, 3, 6)
)

SELECT
    col1,
    col2,
    (max(ARRAY[col3, col4]))[2]
FROM test_table
GROUP BY 1, 2
Run Code Online (Sandbox Code Playgroud)

col4此查询设法获取与 的最大值相对应的值col3 grouped by col1, col2。然而,我没有找到任何优雅的解决方案来在 Snowflake 上复制这一点。

sql greatest-n-per-group maxby snowflake-cloud-data-platform

6
推荐指数
1
解决办法
1610
查看次数

雪花计数所有列中的空值

我见过一些这样的问题 - Count NULL Values from multiple columns with SQL

但是,真的没有办法计算超过 30 列的表中的空值吗?就像我不想按名称指定它们一样?

snowflake-cloud-data-platform

6
推荐指数
1
解决办法
6805
查看次数

雪花网连接器螺纹安全吗?

关于snowflake .NET连接器:https://github.com/snowflakedb/snowflake-connector-net,我在文档或源代码中找不到任何内容表明支持连接池,并且因为连接本身由HttpClient,我们知道HttpClient 应该重用而不是不断创建/处置,当您要跨线程进行许多查询时,使用雪花 .NET 连接器的最佳方法是什么?

注意:我不打算在创建连接后更改连接的任何属性(架构、数据库等)。

例如:

// application startup registers this provider as a singleton
public class SnowflakeConnectionProvider : IDisposable
{
  private IDbConnection _conn;

  public SnowflakeConnectionProvider()
  {
    _conn = new SnowflakeDbConnection();
    _conn.ConnectionString = "connectionString";
    _conn.Open();
  }

  public IDbConnection conn { get => _conn; }

  public Dispose() => _conn.Close();
}
Run Code Online (Sandbox Code Playgroud)

现在,多个线程共享一个线程是否安全,SnowflakeDbConnection如下所示:

public class Worker
{
  public Worker(SnowflakeConnectionProvider provider)
  {
    IDbConnection conn = provider.conn;
    
    IDbCommand cmd = conn.CreateCommand();
    cmd.CommandText = "select * from …
Run Code Online (Sandbox Code Playgroud)

.net c# http snowflake-cloud-data-platform

6
推荐指数
1
解决办法
1270
查看次数

CREATE 或 REPLACE 语句会影响雪花的时间旅行吗?

如果我在雪花中创建一个表,然后使用 CREATE OR REPLACE 语句创建另一个同名的表,我将无法使用时间旅行访问第一个表的内容。

例如,如果我运行这段代码

CREATE TABLE "MY_DB"."MY_SCHEMA"."MY_TABLE" (COL1 VARCHAR, COL2 NUMBER);   
INSERT INTO "MY_DB"."MY_SCHEMA"."MY_TABLE" VALUES ('A',1);
Run Code Online (Sandbox Code Playgroud)

...然后在五分钟内运行这段代码

CREATE OR REPLACE TABLE "MY_DB"."MY_SCHEMA"."MY_TABLE" (COL1 VARCHAR, COL2 NUMBER);
INSERT INTO "MY_DB"."MY_SCHEMA"."MY_TABLE" VALUES ('B',2);
SELECT * FROM "MY_DB"."MY_SCHEMA"."MY_TABLE"
UNION
SELECT * FROM "MY_DB"."MY_SCHEMA"."MY_TABLE" AT (offset => -60*1)
Run Code Online (Sandbox Code Playgroud)

该查询仅返回第二个表中的值。这种行为是预期的吗?我试图用谷歌搜索这个或在雪花文档中找到澄清,但没有任何运气......

谢谢

snowflake-cloud-data-platform

6
推荐指数
3
解决办法
3759
查看次数

是否可以在 docker 容器内使用“externalbrowser”身份验证器与 Snowflake 进行连接身份验证?

我正在尝试在 docker 容器内使用雪花连接器。我想使用externalbrowser身份验证器,以便可以使用 Okta 凭据进行连接,但连接器失败并出现下面提到的错误。

DatabaseError: (snowflake.connector.errors.DatabaseError) 250008 (08001): None: 无法连接到 DB: xx.snowflakecomputing.com:443,无法在此环境中打开浏览器。(此错误的背景位于:http ://sqlalche.me/e/13/4xp6 )

python-webbrowser docker snowflake-cloud-data-platform docker-network

6
推荐指数
1
解决办法
1922
查看次数

确定 Snowflake 中的列是否为虚拟列

Snowflake 没有记录其使用 AS 子句的虚拟列功能。我正在进行迁移,需要以编程方式过滤掉虚拟列。

有什么方法可以识别一列是虚拟的吗?该Information Schema.COLLUMNS视图显示虚拟列定义和非虚拟列定义之间没有任何区别。

calculated-columns virtual-column snowflake-cloud-data-platform

6
推荐指数
1
解决办法
736
查看次数

雪花为什么有内部阶段?

内部阶段的概念具有误导性,或者我的解释不正确。请纠正我的理解。根据文档

  1. Snowflake 帐户可以托管在三个云平台(AWS/Azure/GCP)中的任何一个中。
  2. 因此,这意味着 Snowflake 架构的所有三层(存储、计算和云服务)都可以在任何这些选定的云平台上部署和管理。
  3. 现在Snowflake将云存储中数据文件的位置称为Stage。因此,参考第 2 点,由于存储始终部署在任何公共云 (AWS/Azure/GCP) 上,理论上/隐含地仅指这些外部阶段,对吗?如果这种解释是正确的,为什么首先会有内部阶段的概念。

snowflake-cloud-data-platform

6
推荐指数
1
解决办法
1787
查看次数

如何在 M1 Apple Silicon Mac 上成功安装 Snowflake 的 ODBC 驱动程序?

我在让 Snowflake 的 ODBC 驱动程序在运行 Big Sur 的 M1 Apple Silicon Mac 上运行时遇到问题。

成功遵循Snowflake 网站上的说明后,我使用 DSN 从命令行(使用 iodbctest)测试驱动程序,结果出现以下错误:

1: SQLDriverConnect = [iODBC][Driver Manager]dlopen(/opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib, 6): no suitable image found.  Did find:
    /opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib: no matching architecture in universal wrapper
    /opt/snowfl (0) SQLSTATE=00000
2: SQLDriverConnect = [iODBC][Driver Manager]Specified driver could not be loaded (0) SQLSTATE=IM003

Run Code Online (Sandbox Code Playgroud)

我的 Snowflake 驱动程序安装到/opt/snowflake/snowflakeodbc,所以这是正确的 - 我怀疑这具体是一个 M1 问题。我使用的是 2.24.1 版本的驱动程序,可从此处的下载镜像获取,驱动程序的路径为/etc/odbcinst.ini/opt/snowflake/snowflakeodbc/lib/universal/libSnowflake.dylib该路径存在,并且从我的所有研究看来,它应该是正确的)。

当我在 R 中通过 DBI 运行连接时,出现完全不同的错误:

 Error: nanodbc/nanodbc.cpp:1021: 00000: 
[Snowflake][ODBC] …
Run Code Online (Sandbox Code Playgroud)

odbc r snowflake-cloud-data-platform apple-silicon apple-m1

6
推荐指数
2
解决办法
6115
查看次数

Snowflake 在 TIMESTAMP_NTZ 列中显示“无效日期”

在我们的 Snowflake 数据仓库实例中,当使用 DDL 语句将数据从阶段加载到表中时,timestamp_ntz 列中的某些记录在 Snowflake UI 中COPY INTO显示值。Invalid date

timestamp_ntz 列中的这些Invalid date值具有以下特性:

  • 它们不为 NULL
  • 它们似乎被认为总是大于当前时间戳,并且此属性可用于过滤它们,例如。WHERE strange_timestamp_col > current_timestamp()
  • 它们不是“前端”的东西,即。在 Snowflake UI 中 - 他们使用 Snowflake 中的数据破坏其他客户端

我们希望在尝试执行COPY INTODDL 语句时,无效的数据格式会返回错误;相反,这些具有奇怪属性的邪恶伪时间戳被插入。

database snowflake-cloud-data-platform

6
推荐指数
1
解决办法
6092
查看次数

我们怎样才能找到雪花中的信用余额呢?

有没有什么办法,我们可以算出雪花中还剩下多少学分?

谢谢。

snowflake-cloud-data-platform

6
推荐指数
1
解决办法
4089
查看次数