读取空Azure Cosmos DB容器时触发“无法解析列名_ts”错误求助
解决Azure Synapse数据流读取空Cosmos DB容器报"_ts"列无法解析的问题
问题描述
遍历多个Cosmos DB数据库及对应容器读取数据时,有数据的容器可正常执行,但空容器会抛出错误:
Job failed due to reason: Cannot resolve column name "_ts"
原因
当Cosmos容器为空时,Synapse数据流无法从现有数据中自动推断Schema,而_ts是Cosmos的默认系统属性,数据流默认尝试读取该字段,空容器无数据支撑推断,因此触发解析错误。
解决方案
1. 手动指定数据源Schema
直接在Synapse数据流的Cosmos数据源中手动定义包含_ts的Schema,替代自动推断:
- 打开数据流的Cosmos数据源配置,切换到「Schema」标签
- 若无法从空容器导入Schema,手动添加字段:
- 新增字段
_ts,类型设为Long - 补充业务所需的其他字段(如果有)
- 新增字段
- 保存配置后,空容器的数据流会基于手动Schema执行,不会再触发字段缺失错误
2. 管道层面判断容器是否为空,跳过空容器处理
在管道中先校验容器数据量,为空则跳过数据流执行:
- 添加Lookup活动,执行Cosmos SQL查询:
SELECT VALUE COUNT(1) FROM c,获取容器记录数 - 用If Condition活动判断Lookup返回的计数:
- 计数>0:执行对应数据流
- 计数=0:跳过或执行空记录写入逻辑(如写入一条空数据到目标存储)
3. 关闭系统属性读取(无需_ts时)
如果业务逻辑不需要_ts等Cosmos系统属性,直接禁用读取:
- 在Cosmos数据源的「Settings」标签,取消勾选「Include system properties」选项
- 数据流不再尝试读取
_ts,空容器时自然不会触发该错误
验证
重新运行管道,确认有数据的容器正常执行,空容器要么被跳过,要么基于手动Schema正常运行,无_ts解析错误。
内容的提问来源于stack exchange,提问作者Shailendra Kad
相关产品推荐
相关产品推荐

