首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Snowflake获取数据

从Snowflake获取数据
EN

Stack Overflow用户
提问于 2021-08-18 15:25:48
回答 1查看 394关注 0票数 1

因此,我一直在尝试设置一个进程,使用Snowflake python连接器从我的Python中的Snowflake数据库中提取数据。我已经创建了一个请求数据的方法(如下所示)

代码语言:javascript
复制
import snowflake.connector

def request_data(s, query):
    snowflake_connection = snowflake.connector.connect(user = 'user',
                                                       password = 'password',
                                                       account = 'account',
                                                       warehouse = 'warehouse',
                                                       database = 'database',
                                                       schema = s)
   try:
       with snowflake_connection.cursor() as cursor:
           cursor.execute(query)
           data = cursor.fetch_pandas_all()
   finally:
       snowflake_connection.close()
   return data

我已经能够从该方法请求数据并使用Python中的数据,如下例所示

代码语言:javascript
复制
query = "select * from books.sales where date between '2020-08-01' and '2020-11-31'"
sales = request_data('BOOKS', query)

但是,当我尝试请求更多的数据时(例如将日期范围更改为2020-08-01到2021-07-31),我会得到一个错误

代码语言:javascript
复制
250003: Failed to get the response. Hanging? method: get, url: <snowflake url>

我尝试查看文档,测试的一件事是在cursor - print(cursor.rowcount) (我将其添加到cursor.execute(query)data = cursor.fetch_pandas_all()之间的请求数据方法中)中打印属性rowcount。当我这样做时,我看到行数与我在snowflakecomputing.com中的工作表上测试查询时得到的行数相匹配。

因此,我认为这与数据量有关。我的日期范围是2020-08-01到2021-07-31的查询大约是39,000行。我查阅了有关使用Snowflake Python连接器的请求中的数据量限制的文档,我看到的唯一数字是10,000。

当我试图缩小我的日期范围以使行数小于这个范围时,我仍然得到相同的错误,所以我不确定哪里出了问题。我可以将一个查询分解为多个查询,但我正在努力将我的请求保持在最少。如果有人知道如何解决这个问题,我将非常感激。

EN

回答 1

Stack Overflow用户

发布于 2021-08-18 23:58:16

这是数据包检查器解密网络上数据包的典型症状。Snowflake以一种方式发送较小的结果集,而以另一种方式发送较大的结果集。较大的方式有时会使数据包检查器感到困惑,因为它是直接来自底层主机(亚马逊网络服务、Azure或GCP)的snowflakecomputing.com流量。

首先运行以下查询:

代码语言:javascript
复制
select t.value:type::varchar as type,
       t.value:host::varchar as host,
       t.value:port as port
from table(flatten(input => parse_json(system$whitelist()))) as t;

运行该命令后,您将看到STAGE的行不是"snowflakecomputing.com“,而是aws.com、azure.com或cloud.google.com。这就是更大的结果集的来源,以及网络上正在检查的内容。

将结果显示给您的网络安全团队。向他们解释,这些URL端点中的任何一个都不能进行数据包检测(解密)。可以使用IP范围来代替,但IP范围很大,所以URL是可行的。

如果他们声称已经做了更改,但事情仍然不起作用(有时会发生这种情况),你可以运行SnowCD来测试所需的列表:https://docs.snowflake.com/en/user-guide/snowcd.html通常会发现他们遗漏了一个列表。

如果您使用的是PrivateLink,请参阅此处的URL和端口文档:https://docs.snowflake.com/en/sql-reference/functions/system_whitelist_privatelink.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68835231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档