在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)
但这不起作用。
我正在使用 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 分钟。
Snowflake 似乎默认为某个太平洋时区。我想使用 EET 作为默认时区。有没有办法在系统范围或每个用户范围内设置它?
我有一个日期列和一个时间列,我想制作一个日期时间/时间戳。
我试过了
Date+Time
Run Code Online (Sandbox Code Playgroud)
但我得到:
SQL 编译错误:位置 14 处的错误行 4 函数“+”的参数类型无效:(DATE, TIME(9))
我有一个 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 的最佳方法是什么?或者目前还没有什么好的办法吗?
我正在尝试创建一个聚合 UDF,例如类似sumor的东西median。
文档和示例位于https://docs.snowflake.net/manuals/sql-reference/udf-sql.html和https://docs.snowflake.net/manuals/sql-reference/sql/create-function.html不要解释如何做到这一点。
有人可以解释一下如何和/或提供 MWE 吗?
aggregate-functions user-defined-functions snowflake-cloud-data-platform
我有几个存储为文件的 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
我是 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 的方法,但由于某种原因,它无法正常工作。
我将不胜感激任何有关这方面的指导。
我正在编写一个 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
如何将变量设置为值数组,以便在 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 ×10
python ×4
sql ×2
aws-lambda ×1
connector ×1
django ×1
linter ×1
pandas ×1
permissions ×1
python-3.x ×1
snowsql ×1
sqlalchemy ×1
unit-testing ×1