标签: 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
查看次数

Snowflake 中的异步查询执行:SQL 执行被取消

我正在使用 Snowflake 数据库即服务来存储和处理我们的数据。由于处理大量数据,我想运行一个查询,获取查询ID并让它异步执行查询。系统的另一部分将通过使用该查询 ID 检查查询历史表来监视查询的状态。

我正在使用 Snowflake Python 连接器。

这是我迄今为止所拥有的示例:

from __future__ import print_function
import io, os, sys, time, datetime
modules_path = os.path.join(os.path.dirname(__file__), 'modules')
sys.path.append(modules_path)

import snowflake.connector

def async_query(data):
    connection = snowflake.connector.connect(
        user=data['user'],
        password=data['password'],
        account=data['account'],
        region=data['region'],
        database=data['database'],
        warehouse=data['warehouse'],
        schema=data['schema']
    )

    cursor = connection.cursor()
    cursor.execute(data['query'], _no_results=True)
    print(cursor.sfqid)

    return cursor.sfqid
Run Code Online (Sandbox Code Playgroud)

这段代码似乎有效,即我正在获取查询 ID,但有一个问题 - SQL 查询失败,并出现错误“SQL 执行已取消”。在雪花中。如果我删除该_no_results=True参数,查询运行良好,但随后我必须等待它完成,这不是所需的行为。

有什么想法导致“SQL 执行取消”失败吗?

更多信息:我不想等待的原因是我正在 AWS Lambda 上运行代码,而 Lambda 的最长运行时间为 5 分钟。

python python-3.x aws-lambda snowflake-cloud-data-platform

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

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
查看次数

将数据从熊猫存储到雪花的最佳方法

数据框很大(7-8百万行)。尝试使用chunksize = 5000的to_sql,但从未完成。

使用,

from sqlalchemy import create_engine
from snowflake.sqlalchemy import URL

df.to_sql(snowflake_table , engine, if_exists='replace', index=False, index_label=None, chunksize=20000)
Run Code Online (Sandbox Code Playgroud)

从熊猫DF将数据存储到SF的其他最佳解决方案还有哪些?还是我在这里做错了什么?DF的大小通常为7-10百万行。

python sqlalchemy dataframe pandas snowflake-cloud-data-platform

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

如何在 Snowflake 中设置系统(或用户)时区?

Snowflake 似乎默认为某个太平洋时区。我想使用 EET 作为默认时区。有没有办法在系统范围或每个用户范围内设置它?

snowflake-cloud-data-platform

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

Snowflake SQL:如何向日期添加时间以生成日期时间?

我有一个日期列和一个时间列,我想制作一个日期时间/时间戳。

我试过了

Date+Time
Run Code Online (Sandbox Code Playgroud)

但我得到:

SQL 编译错误:位置 14 处的错误行 4 函数“+”的参数类型无效:(DATE, TIME(9))

snowflake-cloud-data-platform snowsql

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

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
查看次数

如何在 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
查看次数