Azure Data Factory分隔文本文件忽略已导入Schema问题咨询
强制Azure Data Factory按指定34列Schema解析分隔文本的配置方法
ADF默认的分隔文本解析逻辑会优先根据首行实际识别到的列数覆盖手动配置的Schema,这是你配置了34列但预览只显示29列的核心原因,按以下步骤配置即可解决,无需手动修改源文件:
- 第一步:关闭自动Schema推导
打开你已创建的竖线(|)分隔文本数据集,进入「连接」配置页,找到「架构推导类型」配置项,将默认的「从源文件推导」修改为无,彻底关闭ADF自动识别列结构的逻辑。 - 第二步:关闭首行表头识别
同「连接」配置页下,找到「第一行作为表头」选项,取消勾选。因为源文件首行本身缺失5列分隔符,开启该选项时ADF会强制将首行解析出的29个值和列做绑定,直接截断后续列。 - 第三步:校验固定Schema配置
切换到数据集的「架构」页,确认你提前配置的34个列按实际业务顺序排列,列的位置序号从1到34连续无中断,缺失的5列直接按业务需求补全列名、数据类型即可。 - 第四步:关闭列数校验拦截
找到数据集的「容错」配置页,关闭「列数不匹配时标记为错误行」的相关选项,避免列数不足的行被判定为错误行丢弃。配置生效后,所有行都会按位置从左到右匹配34个列的定义,分隔符不足导致的缺失字段会自动赋值为null,不会出现列截断。
注意:配置完成后先点击数据集页的「清除缓存」/「重置架构」按钮再做数据预览,ADF默认预览会缓存之前自动推导的29列结构,不清除缓存会出现配置已改但预览还是旧结果的问题。
如果你必须保留源文件首行的29个表头值,不想手动填写所有列名,可以用管道逻辑动态补全Schema:
- 先加一个查找活动,读取目标文件的第一行内容,用
@split(查找活动输出.firstRow.prop_0, '|')表达式切割得到长度为29的表头数组 - 定义长度固定为34的列名数组变量,前29位用上述切割得到的表头值填充,后5位写入预设的缺失列名
- 后续复制活动配置源端跳过1行表头,将文件按无Schema的纯文本行读取,用
split函数按|切割每行内容后,和固定长度的列名数组做显式映射即可,切割后长度不足34的位置自动补null对齐。
内容的提问来源于stack exchange,提问作者P.Harrison
相关产品推荐
相关产品推荐

