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

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

如何使用 pandas 和 sqlalchemy 将 VARIANT 或 ARRAY 数据类型插入到 Snowflake 中

我有一个 Pandas 数据框,其中包含多个列表列。我想将它们作为ARRAY数据类型插入到我的 Snowflake 表中。

传统上,我使用 PostgreSQL,并简单地插入为df_to_insert.to_sql(TABLE_NAME, sqlalchemy_connection, **other_parameters).

然而,我正在努力插入雪花。当我有一个列表列时,sqlAlchemy Snowflake 方言认为它是一个字符串:

表达式类型与列数据类型不匹配,需要 ARRAY,但列 NAME_OF_COLUMN_WITH_LISTS 为 VARCHAR(2)

我尝试通过添加显式数据类型来向 sqlAlchemy 引擎提示该列不是字符串:

df_to_insert.to_sql("MY_SNOWFLAKE_TABLE_NAME",
                     snowflake_connection,
                     if_exists="append",
                     index=False,
                     dtype={'NAME_OF_COLUMN_WITH_LISTS': sqlalchemy.types.JSON})
Run Code Online (Sandbox Code Playgroud)

这只会让我:

sqlalchemy.exc.StatementError:(builtins.AttributeError)“SnowflakeDialect”对象没有属性“_json_serializer”

将数据插入变体/数组类型的雪花表并仍然使用 pandas / sqlalchemy 的最佳方法是什么?或者目前还没有什么好的办法吗?

python sqlalchemy pandas snowflake-cloud-data-platform

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

如何在 Snowflake 中创建聚合 UDF

我正在尝试创建一个聚合 UDF,例如类似sumor的东西median

文档和示例位于https://docs.snowflake.net/manuals/sql-reference/udf-sql.htmlhttps://docs.snowflake.net/manuals/sql-reference/sql/create-function.html不要解释如何做到这一点。

有人可以解释一下如何和/或提供 MWE 吗?

aggregate-functions user-defined-functions snowflake-cloud-data-platform

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

如何为 SQL 语句创建单元测试?

我有几个存储为文件的 SQL 语句,由 Python 脚本执行。该数据库托管在 Snowflake 中,我使用Snowflake SQLAlchemy连接到它。

我如何测试这些陈述?我不想执行它们,我只是想检查它们是否可以执行。

检查它是否是有效的标准 SQL是一件非常基本的事情。更好的答案是考虑雪花特定的东西,例如

copy into s3://example from table ...
Run Code Online (Sandbox Code Playgroud)

最好的答案是还检查权限的东西,例如SELECT表是否可见/可读的语句。

python sql unit-testing snowflake-cloud-data-platform linter

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

如何从Django框架连接到snowflake数据库

我是 Django 新手,我正在尝试显示来自 Snowflake 数据库的结果。我知道 Django 有多个内置数据库后端引擎,例如:django.db.backends.postgresql以及django.db.backends.mysql它支持的其他一些引擎。

不幸的是,我找不到配置数据库后端引擎的正确方法

设置.py

当我输入sqlalchemyorsnowflake-sqlalchemy作为引擎时,出现以下错误:

Try using 'django.db.backends.XXX', where XXX is one of:
'mysql', 'oracle', 'postgresql', 'sqlite3'
Run Code Online (Sandbox Code Playgroud)

我的猜测是继续使用,sqlalchemy因为这是我通常用来连接 Django 之外的 Snowflake 的方法,但由于某种原因,它无法正常工作。

我将不胜感激任何有关这方面的指导。

django database-connection snowflake-cloud-data-platform

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

write_pandas雪花连接器功能无法在表上操作

我正在编写一个 python 脚本,该脚本旨在处理一些数据,创建一个表(如果不存在),并在插入刷新的数据集之前截断该表。我使用的角色具有使用、读取、写入、创建表权限以及阶段权限,设置如下:

grant usage, read, write on future stages in schema <schema> to role <role>

我通过雪花连接器在 python 中使用 write_pandas 函数。文档说该函数使用 PUT 和 Copy Into 命令:

To write the data to the table, the function saves the data to Parquet files, uses the PUT command to upload these files to a temporary stage, and uses the COPY INTO <table> command to copy the data from the files to the table. You can use some of the function parameters to control …

python permissions connector database-schema snowflake-cloud-data-platform

5
推荐指数
3
解决办法
2万
查看次数

Snowflake SQL - 如何使用数组变量查询 IN 子句

如何将变量设置为值数组,以便在 IN 子句中使用?

这有效:

SELECT *
  FROM TableA
 WHERE Col1 IN ('Value1', 'Value2', 'Value3');
Run Code Online (Sandbox Code Playgroud)

但我不知道如何从手动指定的数组创建要使用的变量。我想做这样的事情:

SET values = ('Value1', 'Value2', 'Value3');

SELECT *
  FROM TableA
 WHERE Col1 IN $values;
Run Code Online (Sandbox Code Playgroud)

报告的错误: SQL compilation error: Number of variables on left-hand side of assignment (1) is not equal to the number of values on right-hand side (3)

那么如何为此目的创建一个数组变量呢?

snowflake-cloud-data-platform

5
推荐指数
2
解决办法
6472
查看次数