You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Snowflake Python Connector拉取数据报250003错误如何解决?

问题复现

通过Snowflake Python Connector搭建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

小数据量请求可正常运行,示例如下:

query = "select * from books.sales where date between '2020-08-01' and '2020-11-31'"
sales = request_data('BOOKS', query)

扩大日期范围拉取约39000行数据时,抛出如下错误:

250003: Failed to get the response. Hanging? method: get, url: <snowflake url>

测试确认SQL执行正常,问题出在结果拉取阶段,缩小行数到10000以内仍然报错,不需要拆分多次请求的前提下可通过如下方案解决。

原因分析
  • 该报错本质是请求超时,并非10000行的单次拉取上限限制:Snowflake Python Connector的10000行限制是默认单次批量拉取的行数,不是总拉取上限,默认会自动分批拉取直到拿完全量结果
  • 触发超时的常见原因:默认请求超时时间过短、长时间拉取时会话被断开、网络波动导致校验失败、连接器版本存在已知Bug
解决方案

方法1:调整连接器核心参数(优先测试)

在连接配置中新增会话保活、超时调整、批量拉取行数配置,无需拆分请求即可直接拉取全量39000行数据,修改后的代码如下:

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,
        client_session_keep_alive = True, # 保持会话活跃,避免长时间拉取时连接被断开
        connection_timeout = 300, # 连接超时时间设为5分钟,可根据数据量按需调大
        client_compress = True, # 开启传输压缩,减少数据传输耗时
        ocsp_fail_open = False # 关闭OCSP校验,避免网络波动导致的校验超时
    )
    try:
        with snowflake_connection.cursor() as cursor:
            cursor.arraysize = 100000 # 单批拉取上限调整为10万行,覆盖3.9万行需求实现单次拉取
            cursor.execute(query)
            data = cursor.fetch_pandas_all()
    finally:
        snowflake_connection.close()
    return data

方法2:升级连接器版本

旧版本Snowflake Python Connector存在结果拉取超时的已知Bug,直接升级到最新版本即可解决:

pip install --upgrade snowflake-connector-python

内容的提问来源于stack exchange,提问作者Ehren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:54:03