因此,我一直在尝试设置一个流程,以使用 Snowflake Python 连接器从 python 中的 Snowflake 数据库中提取数据。我已经制作了一个请求数据的方法(如下所示)
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中的数据,如下例所示
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),我收到错误
250003: Failed to get the response. Hanging? method: get, url: <snowflake url>
我尝试查看文档,我测试过的一件事是打印属性 rowcount在游标 -
print(cursor.rowcount)
中(我将其添加到
cursor.execute(query)
和
data = cursor.fetch_pandas_all()
之间的请求数据方法中。当我这样做时,我看到 rowcount 与我在工作表上测试查询时获得的行数相匹配在snowflakecomputing.com中。
所以我想这与数据量有关。我的日期范围为2020年8月1日到2021年7月31日的查询大约有39,000行。我查看了有关 Snowflake Python 连接器请求中数据量限制的文档,我见过的唯一数字是 10,000。
当我尝试减小日期范围以便行数时会比这个少,我仍然遇到同样的错误,所以我不确定出了什么问题。我可以将一个查询分解为多个查询,但我试图将我的请求保持在最低限度。如果有人知道如何解决这个问题,我将不胜感激。
这个错误“250003:获取响应失败。挂起?method: get, url: ”在 Snowflake Python 连接器中,通常表明由于结果集过大,客户端和 Snowflake 服务器之间的数据传输出现问题。尽管
rowcount
可能表明 Snowflake 成功执行了查询,但问题出在通过网络有效地将大量数据提取到 Pandas DataFrame (
fetch_pandas_all()
)。
以下是一些可以解决此问题的步骤:
-
增加提取块大小:
Snowflake Python 连接器默认情况下以块的形式提取数据。可以通过设置
fetch_pandas_chunk_size
参数来增加此块大小。这将允许分批提取数据并减少内存压力。
python
data = cursor.fetch_pandas_all(chunk_size=10000) # 每次提取 10000 行
尝试不同的块大小以找到适合情况的最佳值。
-
使用迭代器提取:
fetch_pandas_all()
会尝试将所有数据立即加载到内存中,这可能会导致大型结果集出现问题。考虑改用fetchmany()
以迭代方式提取数据。
python
while True:
chunk = cursor.fetchmany(10000) # 每次提取 10000 行
if not chunk:
break
# 处理当前数据块
这种方法允许逐块处理数据,从而防止内存溢出。
-
优化查询: 如果只需要数据的一个子集,请优化的查询以仅选择必要的列和行。使用
LIMIT
子句来测试和调试的代码。 -
检查网络连接: 网络问题有时会导致数据传输出现问题。确保与 Snowflake 服务器的连接稳定且具有足够的带宽。
-
客户端内存和资源: 对于非常大的结果集,请考虑的客户端计算机的可用内存和处理能力。如果提取的数据量太大,可能需要升级的资源或探索其他解决方案,例如将数据直接卸载到云存储。
如果尝试了这些步骤后问题仍然存在,可能需要联系 Snowflake 支持以获得进一步的帮助。提供有关的环境和查询的详细信息,以便他们可以有效地帮助进行故障排除。
标签:python,snowflake-cloud-data-platform From: 68835231