标签: snowflake-cloud-data-platform

从雪花中批量读取行

在mysql中,如果我必须一次读取10行,我可以将查询编写为

select * from foo limit 10, 10
Run Code Online (Sandbox Code Playgroud)

然后我可以继续增加偏移量并读取整个表。

我如何在雪花中做同样的事情?

我试过

select a, b from (select a, b from foo) tempview where rownum <= 100;
Run Code Online (Sandbox Code Playgroud)

但这不起作用。

sql snowflake-cloud-data-platform

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

django到雪花连接并运行ORM查询

我希望从Postgres转向SnowFlake,因为我的某些功能需要运行时分析,而运行时分析在Snowflake中更快。

我只能获得用于Snowflake的Python连接器API,这将要求我创建原始查询而不是Djago ORM查询。

无论如何,我们可以使用Django连接到Snowflake并在Snowflake上执行相同的Django ORM查询。

我看到了这个老帖子 如何在Django中查询此(雪花)数据模式

但是找不到如何与Snowflake建立django连接。

django snowflake-cloud-data-platform

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

从 Spark 到雪花的连接

我写这篇文章不是为了问问题,而是分享知识。我正在使用 Spark 连接到雪花。但我无法访问雪花。数据块中的内部 JDBC 驱动程序似乎有问题。

这是我得到的错误。

java.lang.NoClassDefFoundError:net/snowflake/client/jdbc/internal/snowflake/common/core/S3FileEncryptionMaterial
Run Code Online (Sandbox Code Playgroud)

我尝试了许多版本的雪花 jdbc 驱动程序和雪花驱动程序。好像我可以匹配到正确的。

apache-spark apache-spark-sql snowflake-cloud-data-platform databricks

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

generate_series() 相当于雪花

我试图找到与 generate_series() (PostgreSQL 语法)等效的雪花。

SELECT generate_series(timestamp '2017-11-01', CURRENT_DATE, '1 day')
Run Code Online (Sandbox Code Playgroud)

sql generate-series snowflake-cloud-data-platform

6
推荐指数
4
解决办法
5760
查看次数

在存储过程中打印雪花查询

我正在尝试使用 Snowflake 存储过程,并希望将下面存储过程中的 SQL 语句打印到屏幕上。

CREATE OR REPLACE PROCEDURE read_western_provinces()
  RETURNS VARCHAR NOT NULL
  LANGUAGE JAVASCRIPT
  AS
  $$
  var return_value = "";
  try {
      var command = "SELECT * FROM western_provinces ORDER BY province;"
      var stmt = snowflake.createStatement( {sqlText: command } );
      var rs = stmt.execute();
      if (rs.next())  {
          return_value += rs.getColumnValue(1);
          return_value += ", " + rs.getColumnValue(2);
          }
      while (rs.next())  {
          return_value += "\n";
          return_value += rs.getColumnValue(1);
          return_value += ", " + rs.getColumnValue(2);
          }
      }
  catch (err)  {
      result …
Run Code Online (Sandbox Code Playgroud)

snowflake-cloud-data-platform

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

从数组中展平 Snowflake 中的数据源

我正在尝试修复数据集中的数组。目前,我有一个数据集,其中包含多个不同 uuid 的引用号。我想做的就是在 Snowflake 中将其展平,以便每个 uuid 的参考号都有单独的行。例如

Reference                                       UUID
1) 9f823c2a-ced5-4dbe-be65-869311462f75 "[
                                         ""05554f65-6aa9-4dd1-6271-8ce2d60f10c4"",
                                         ""df662812-7f97-0b43-9d3e-12f64f504fbb"",
                                          ""08644a69-76ed-ce2d-afff-b236a22efa69"",
                                          ""f1162c2e-eeb5-83f6-5307-2ed644e6b9eb"",
                                            ]"
Run Code Online (Sandbox Code Playgroud)

最终应该看起来像:

Reference                                UUID
1) 9f823c2a-ced5-4dbe-be65-869311462f75    05554f65-6aa9-4dd1-6271-8ce2d60f10c4
2) 9f823c2a-ced5-4dbe-be65-869311462f75    df662812-7f97-0b43-9d3e-12f64f504fbb
3) 9f823c2a-ced5-4dbe-be65-869311462f75    08644a69-76ed-ce2d-afff-b236a22efa69
4) 9f823c2a-ced5-4dbe-be65-869311462f75    f1162c2e-eeb5-83f6-5307-2ed644e6b9eb

Run Code Online (Sandbox Code Playgroud)

我刚刚开始在 Snowflake 工作,所以我对它很陌生。看起来有一个横向扁平化,但这要么不能告诉我我有各种各样的错误。雪花的文档在这方面有点令人困惑。

sql arrays snowflake-schema snowflake-cloud-data-platform snowflake-task

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

将包含 null 和空字符串的雪花表复制到可以使用 psql copy 命令导入的 csv

所以,如果 Snowflake 中有这张表:

create table t (x string, y string) as select '', null;

并且您使用 file_format csv 将其复制到外部阶段,如果您未将 field_optionally_enlined_by 设置为 none 以外的其他值,则会出现此错误:

如果未指定文件格式选项 field_optionally_enlined_by ,则无法卸载空字符串。

所以,假设它设置为“”。

create stage some_stg
url='s3://<some-bucket>/<some-dir>'
file_format = (type = csv field_optionally_enclosed_by='"' compression = none)
credentials = (aws_role = '<your-arn-for-snowflake>')
Run Code Online (Sandbox Code Playgroud)

如果您不想让 Snowflake 使用您的 s3 存储桶,我确信这个问题会在内部阶段重现。

当您运行上面的表 t 的副本时:

copy into @some_stg/t.csv from t overwrite = true;

您会得到一个如下所示的文件 (t_0_0_0.csv):

"","\N"

在 postgres 中创建等效表后:

create table t (x varchar, y varchar);

当您使用 psql 复制将其加载到 postgres 时,如下所示:

psql -h …

csv string postgresql null snowflake-cloud-data-platform

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

Snowflake (LEFT JOIN) LATERAL:无法评估不支持的子查询类型

\n

横向连接

\n\n

在 FROM 子句中,LATERAL 关键字允许内联视图引用该内联视图之前的表表达式中的列。

\n\n

横向连接的行为更像是相关子查询,而不是大多数连接。

\n
\n\n

让我们稍微调整一下文档中提供的代码:

\n\n
CREATE TABLE departments (department_id INTEGER, name VARCHAR);\nCREATE TABLE employees (employee_ID INTEGER, last_name VARCHAR,\n                        department_ID INTEGER, project_names ARRAY);\n\nINSERT INTO departments (department_ID, name) VALUES \n    (1, \'Engineering\'), \n    (2, \'Support\'),\n    (3, \'HR\');  -- adding new row\n\nINSERT INTO employees (employee_ID, last_name, department_ID) VALUES \n    (101, \'Richards\', 1),\n    (102, \'Paulson\',  1),\n    (103, \'Johnson\',  2);  \n
Run Code Online (Sandbox Code Playgroud)\n\n

询问:

\n\n
SELECT * \nFROM departments AS d,\nLATERAL (SELECT * FROM employees AS e \n …
Run Code Online (Sandbox Code Playgroud)

snowflake-cloud-data-platform

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

如何在 Amazon Linux 上安装 dplyr-snowflakedb 和 rJava?

这里的目标是在 AWS Linux 机器上安装dplyr-snowflakedb R包。问题是该rJava软件包无法安装,失败并显示以下错误消息:

“installation of package ‘rJava’ had non-zero exit status”
Run Code Online (Sandbox Code Playgroud)

dplyr.snowflakedb软件包提出以下建议:

需要安装 rJava 包并使用 Java 8 来支持 SnowflakeDB JDBC 要求。这可能需要:

  • 安装 Java 8

  • 运行 R CMD javareconf 所以 R 使用 Java 8 作为它的 JAVA_HOME

  • 从源代码安装 rJava,以便它可以与 Java 8 链接

尽管尝试了这些策略,rJava 仍然无法安装在 AWS linux 上。


AWS linux 实例运行的是 Java 8:

conda activate ~/anaconda3/envs/R
(R) [ec2-user@ip-xx-xx-xx-xx ~]$ java -version

>>> openjdk version "1.8.0_152-release"
>>> OpenJDK Runtime Environment (build 1.8.0_152-release-1056-b12)
>>> OpenJDK 64-Bit Server …
Run Code Online (Sandbox Code Playgroud)

java r amazon-web-services dplyr snowflake-cloud-data-platform

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

雪花熊猫 pd_writer 写出带有 NULL 的表

我有一个 Pandas 数据框,我正在使用 SQLAlchemy 引擎和to_sql函数将它写到 Snowflake 。它工作正常,但chunksize由于某些雪花限制,我必须使用该选项。这对于较小的数据帧也很好。但是,某些数据帧有 500k+ 行,并且每块 15k 记录,完成写入 Snowflake 需要很长时间。

我做了一些研究,发现pd_writer了 Snowflake 提供的方法,它显然可以更快地加载数据帧。我的 Python 脚本完成得更快,我看到它创建了一个包含所有正确列和正确行数的表,但每一行中每一列的值都是 NULL。

我认为这是一个NaNNULL发行及想尽一切可能取代NaN以s None,而它确实在数据帧中的替代品,通过它获取表的时候,一切都变得NULL。

我如何才能pd_writer将这些巨大的数据帧正确写入 Snowflake?有没有可行的替代方案?

编辑:按照克里斯的回答,我决定尝试使用官方示例。这是我的代码和结果集:

import os
import pandas as pd
from snowflake.sqlalchemy import URL
from sqlalchemy import create_engine
from snowflake.connector.pandas_tools import write_pandas, pd_writer


def create_db_engine(db_name, schema_name):
    return create_engine(
        URL(
            account=os.environ.get("DB_ACCOUNT"),
            user=os.environ.get("DB_USERNAME"),
            password=os.environ.get("DB_PASSWORD"),
            database=db_name,
            schema=schema_name,
            warehouse=os.environ.get("DB_WAREHOUSE"),
            role=os.environ.get("DB_ROLE"),
        )
    )


def create_table(out_df, table_name, idx=False):
    engine = create_db_engine("dummy_db", …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy dataframe pandas snowflake-cloud-data-platform

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