标签: snowflake-cloud-data-platform

Snowflake.connector SQL 编译错误 pandas 数据帧中的标识符无效

我正在尝试将从 json 响应创建的 df 摄取到现有表中(该表当前为空,因为我似乎无法让它工作)

df 类似于下表:

指数 clicks_affiliate
0 3214
1 2221

但我看到以下错误:

Snowflake.connector.errors.ProgrammingError:000904(42000):SQL编译错误:位置94处的错误行1无效标识符“clicks_affiliated”

雪花中的列名称与我的数据框中的列匹配。

这是我的代码:

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

  
df_norm = json_normalize(json_response, 'reports')

#I've tried also adding the below line (and removing it) but I see the same error
df = df_norm.reset_index(drop=True)

   
def create_db_engine(db_name, schema_name):
    engine = URL(
        account="ab12345.us-west-2",
        user="my_user",
        password="my_pw",
        database="DB",
        schema="PUBLIC",
        warehouse="WH1",
        role="DEV"
    )
    return …
Run Code Online (Sandbox Code Playgroud)

pandas snowflake-cloud-data-platform snowflake-connector

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

如何清除雪花中上次运行的查询(缓存)

我想测试查询性能。

-- Example:
SELECT * FROM VW_TESTROLE;
Run Code Online (Sandbox Code Playgroud)

vw_testrole- 有很多连接。由于数据被缓存,因此返回的时间更短。我想查看查询计划以及如何查看它或清除缓存,或者我可以查看执行所需的原始时间。

谢谢,习

snowflake-cloud-data-platform

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

减小 Snowflake-connector-python[pandas] 模块的大小

我正在尝试在 AWS 中创建一个连接到 Snowflake 数据库的 lambda 函数。为此,我需要该snowflake-connector-python[pandas]包(https://docs.snowflake.com/en/user-guide/python-connector-pandas.html),该包及其所有依赖项的未压缩大小超过 250 MB(大约 280 MB)。这是一个问题,因为 AWS lambda 允许最大 250 MB 的依赖项(使用 AWS 层)。

包的大小相当令人惊讶,从依赖关系来看,最大的违规者是 pyarrow(大约 80 MB)、pandas(大约 60 MB)和 numpy(大约 40 MB)。有没有办法减小整个包的大小,只安装相关部分,从而将大小减小到 250 MB 以下?也就是说,我需要能够连接、读取和写入 Snowflake,没什么花哨的。

我知道在这些情况下还有其他选择,例如容器,但是如果可能的话我想避免这种情况。

amazon-web-services aws-lambda snowflake-cloud-data-platform python-3.9 snowflake-connector

9
推荐指数
1
解决办法
809
查看次数

用于Snowflake Datawarehouse的SELECT INTO语法

我相信SELECT INTOSnowflake中有类似的语法,但我无法找到使用它的文档或示例.

CREATE TABLE raw_data (
    Timestamp TIMESTAMP NOT NULL, 
    Date DATE NOT NULL, 
    UserID STRING,
    Address STRING,
    Phone STRING,
    Value INTEGER
);

COPY INTO raw_data from 's3://my_bucket'
CREDENTIALS=(AWS_KEY_ID='XXXXX' AWS_SECRET_KEY='XXXX')
ON_ERROR=CONTINUE;

CREATE TABLE summary (
    Date DATE NOT NULL,
    UserID STRING,
    Value INTEGER
);

INSERT INTO summary 
SELECT Date, UserID, Value FROM raw_data
Run Code Online (Sandbox Code Playgroud)

上面的工作,但不是定义summary我想要的表,而是SELECT INTO让SQL解析器为我创建表.

sql insert-into snowflake-cloud-data-platform

8
推荐指数
1
解决办法
6740
查看次数

如何在 Snowflake SQL 中将字符串连接到变量

可以使用 Snowflake变量来确定源表,如下所示:

set src='some_table';
select count(*) from $src;
Run Code Online (Sandbox Code Playgroud)

但是,我正在寻找一种方法来提供数据库名称作为变量并将其与表名称连接起来。伪代码:

set db='database';
select count(*) from $db.table_name; 
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我想保留databasetable_name分开(所以设置dbandtable=database.table_name不是一个选项)。

snowflake-cloud-data-platform

8
推荐指数
1
解决办法
7358
查看次数

关闭 Snowflake DB 日志记录,同时仍将日志级别保持为 DEBUG

是否可以禁用 Snowflake SQL 日志记录,该日志记录数据库连接的开始和结束以及正在执行的所有查询,同时保持logging.basicConfig(level=logging.INFO)调试我的开发。

也许这不是特定于 Snowflake 而是来自 Python 的通用数据库连接?

我使用的是snowflake-connector-python1.8.1 版

我目前拥有的示例简化日志。

2019-06-10 16:27:10,015 INFO: /*Need this line*/

2019-06-10 16:27:10,015 INFO: Snowflake Connector for Python Version: 1.8.1, Python Version: 3.7.3, Platform: Windows-7-6.1.7601-SP1
2019-06-10 16:27:10,015 INFO: This connection is in OCSP Fail Open Mode. TLS Certificates would be checked for validity and revocation status. Any other Certificate Revocation related exceptions or OCSP Responder failures would be disregarded in favor of connectivity.
2019-06-10 16:27:10,020 INFO: Starting new HTTPS …
Run Code Online (Sandbox Code Playgroud)

python logging database-connection snowflake-cloud-data-platform

8
推荐指数
1
解决办法
1569
查看次数

如何将 JSON 数据插入到 Snowflake Datawarehouse 表的列中?

我正在尝试编写一个 SQL 查询来将 JSON 数据上传到 Snowflake DB 表中。

我写的查询如下所示:

insert into xyz_table(id, json_column) values (1, '{
  "first_name": "John",
  "last_name": "Corner",
  "createddate": "2019-07-02T10:01:30+00:00",
  "type": "Owner",
  "country": {
    "code": "US",
    "name": "United States"
  }
}');
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

SQL compilation error: Expression type does not match column data type, expecting VARIANT but got VARCHAR(182) for column CANONICAL_JSON
Run Code Online (Sandbox Code Playgroud)

请告诉我,如何在 Snowflake DB 表中使用 SQL 查询插入JSON 数据

snowflake-cloud-data-platform

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

如何检查雪花中的时区

我想以雪花形式显示时区,例如“美国/太平洋”或“GMT”。有没有什么函数可以表明这一点。像选择 current_timezone 这样的东西。

snowflake-cloud-data-platform

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

如何限制重复记录插入到雪花表中

我在雪花中使用主键创建了下表,每当我尝试将数据插入该表时,它也允许重复记录。如何限制重复的id?

create table tab11(id int primary key not null,grade varchar(10));

insert into tab11 values(1,'A');
insert into tab11 values(1,'B');

select * from tab11;
Run Code Online (Sandbox Code Playgroud)

输出:插入重复记录。

ID  GRADE
1   A
1   B
Run Code Online (Sandbox Code Playgroud)

snowflake-cloud-data-platform

8
推荐指数
2
解决办法
5150
查看次数

获取未知大小数组的最后一个元素

在 Snowflake 中,我可以在不知道数组长度的情况下获取数组的第一个元素:

with foo as (
  select array_construct('duck','duck','goose') as a
)
select a[0] from foo -- returns 'duck'
Run Code Online (Sandbox Code Playgroud)

但要获取最后一个元素,我不能使用 "pythonic" a[-1],因为select a[-1] from foo返回:

无效的提取路径“-1”:数组索引-1 是禁止的;必须介于 0 和 2,147,483,647 之间。

有趣的是,我可以用来array_slice()获取倒数第二个元素:

select array_slice(a,-2,-1) from foo -- returns 'duck'
Run Code Online (Sandbox Code Playgroud)

但不是最后一个元素,因为“输出包括最多但不包括参数指定的元素”(doc)。

怎样才能得到“鹅”呢?

sql snowflake-cloud-data-platform

8
推荐指数
1
解决办法
7172
查看次数