使用SSIS从Snowflake导入SQL Server时遇ODBC空值指示器指针错误
错误信息
[SnowFlake Query for Unwinding [398]] Error: SQLSTATE: 22002,
Message: [Snowflake][ODBC] (10450) Indicator pointer is required by
the driver to indicate NULL output data, but is not provided.:
[SnowFlake Query for Unwinding [398]] Error: SSIS Error Code
DTS_E_INDUCED TRANSFORMFAILUREONERROR. The "SnowFlake Query for
Unwinding. Outputs [ODBC Source Output]" failed because error code
0xC020F450 occurred, and the error row disposition on "SnowFlake
[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. The
PrimeOutput method on SnowFlake Query for Unwinding returned error
code 0xC0209029. The component returned a failure code when the
pipeline engine called PrimeOutput().
解决方案
处理Snowflake视图中的NULL值
错误根源通常是视图包含可空的复杂数据类型(如VARIANT、OBJECT、ARRAY),或字段NULL值未被正确标识。修改视图,对这类字段做显式NULL处理:-- 示例:将NULL的复杂类型转为默认空值 SELECT COALESCE(variant_col, PARSE_JSON('{}')) AS variant_col, COALESCE(array_col, ARRAY_CONSTRUCT()) AS array_col FROM your_source_table调整ODBC驱动配置
打开Snowflake ODBC数据源配置的Advanced选项卡:- 把
UseQueryResultCache设为No,避免缓存元数据不匹配 - 增大
StringColumnLength参数,覆盖字段最大长度,防止截断导致NULL识别异常 - 根据字段类型开启
BindAsTimestamp或BindAsDecimal参数,匹配驱动处理逻辑
- 把
修正SSIS ODBC源组件设置
在SSIS的ODBC源编辑器中:- 进入Columns选项卡,确认所有输出列的
Nullable属性与Snowflake字段可空性一致(设为True) - 若使用自定义SQL查询,显式CAST可空字段为对应类型,帮助SSIS识别NULL:
SELECT CAST(nullable_varchar_col AS VARCHAR(255)) AS nullable_varchar_col FROM your_problem_view
- 进入Columns选项卡,确认所有输出列的
更新Snowflake ODBC驱动
旧版驱动可能存在SSIS兼容性问题,下载安装最新版驱动,确保版本与SSIS运行环境(32/64位)匹配。
内容的提问来源于stack exchange,提问作者nishant damani

