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

升级snowflake-connector后fetch_pandas_all()返回非唯一索引报错问题

问题成因

snowflake-connector-python 从2.5.x版本开始,为了优化大数据量下的拉取性能,fetch_pandas_all()方法改为分批次拉取Arrow格式的结果集,每批次数据转换为Pandas DataFrame时都会独立生成从0开始的索引,批次拼接时没有做全局索引重置,就会出现最终返回的DataFrame存在重复索引的问题。你升级到的2.7.0版本正好包含了这个逻辑变更,和pyarrow 5.0.0的组合触发了该问题,而此前2.4.6版本采用单批次全量拉取逻辑,索引是连续唯一的,所以没有异常。

解决方案

以下方案可根据实际场景选择:

  • 单次调用快速修复:获取DataFrame后手动重置索引即可,代码如下:
# drop=True表示删除原有重复索引,生成从0开始的连续唯一索引
long_data_df = cur.fetch_pandas_all().reset_index(drop=True)
# 如果需要索引从1开始,额外加一行
long_data_df.index += 1
  • 全局配置彻底解决:建立Snowflake连接时新增arrow_preserve_index=False参数,后续所有fetch_pandas_all()返回的结果都会自动生成连续唯一索引,无需每次手动处理:
ctx = connector.connect(
    user=user,
    password=pwd,
    account="***.eu-central-1",
    warehouse="***",
    database="***",
    arrow_preserve_index=False
)
  • 合并时临时规避:如果仅在pd.concat环节报错,也可以在合并时添加ignore_index=True参数,自动忽略原有重复索引生成新的全局索引:
merged_df = pd.concat([df1, df2, df3], ignore_index=True)
  • 版本回退:如果不想修改业务代码,也可以回退到无该问题的版本组合:snowflake-connector-python==2.4.6 + pyarrow==3.0.0,但不推荐长期使用旧版本,避免错过性能优化和安全补丁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:39:04