SSIS导入导出向导ODBC连接Snowflake超时问题求助
使用SQL Server 2014(已安装最新Service Pack/CU 12.6444),通过SSIS导入导出向导,采用Snowflake最新ODBC驱动从Snowflake导入数据。小查询可成功连接并导入,但运行耗时数分钟的查询时,总是在30秒后超时,报错信息如下:
- Pre-execute (Error)
Messages
Error 0xc0047062: Data Flow Task 1: System.Data.Odbc.OdbcException (0x80131937): ERROR [HY000] [Snowflake][Snowflake] (15)
Query has timed out. User specified timeout in seconds=30, Elapsed=45
已在数据源窗口设置超时属性,但未生效,配置字符串如下:
Dsn=snowflake;query_timeout=0;commandtimeout=0;login_timeout=0;statement_timeout_in_seconds=4000;timeout=0
调整SSIS数据源组件的CommandTimeout:
右键点击Data Flow Task中的Snowflake数据源组件,选择「编辑」,切换到「高级」选项卡,找到「CommandTimeout」属性,手动设置为较大值(如3600)。SSIS组件自身的超时设置优先级通常高于连接字符串参数。修改ODBC数据源管理器的DSN配置:
打开Windows「ODBC数据源管理器」,找到对应的Snowflake DSN,进入配置界面,在「高级」或「参数」板块,将「Query Timeout」或「Statement Timeout」设为0(无超时)或足够大的值。部分ODBC驱动会优先读取DSN中的全局配置,忽略连接字符串里的参数。设置Snowflake会话级超时参数:
在导入查询的开头添加会话级配置语句,强制覆盖超时限制:ALTER SESSION SET STATEMENT_TIMEOUT_IN_SECONDS = 3600;调整SSIS包的执行超时属性:
右键点击SSIS包,选择「属性」,找到「ExecutionTimeout」属性,默认可能为30秒,将其设为0(无超时)或更大数值。这个属性控制整个包的执行时长上限,若设置过短会直接中断长查询。验证驱动兼容性:
最新Snowflake ODBC驱动可能与SQL Server 2014的SSIS存在兼容性问题,可尝试降级至官方推荐的稳定版本(适配SQL Server 2014的版本)后测试。优化长查询逻辑:
从根源减少查询耗时:给Snowflake表添加合适的索引、限制返回数据范围、将大查询拆分为多批次导入,或在Snowflake端预先创建优化后的视图,降低查询执行时间。
内容的提问来源于stack exchange,提问作者Depth of Field

