Azure Data Factory中PowerQuery拆分列触发Table.AddColumn报错原因与解决方案问询
报错诱因
- ADF数据流的Power Query解析器对嵌套的步骤调用支持性较差:你当前的第二个拆分步骤直接把
Table.TransformColumnTypes作为参数嵌套在Table.SplitColumn内部,ADF的M表达式解析器无法正确识别嵌套的上下文,导致拆分列底层调用Table.AddColumn时无法读取对应列的元数据,触发报错。 - 你使用的
Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true)第三个参数设置为true(从右往左匹配分隔符),ADF的M运行时对该参数的兼容存在已知问题,在处理无分隔符的行时容易触发表达式解析错误。 - 待拆分的
ApprovedDate列如果存在空值、非标准日期格式的行,嵌套转换类型时也会导致列元数据识别失败。
解决方案
把嵌套的步骤拆分为独立的显式步骤,同时调整分隔符拆分函数的参数即可解决问题,修改后的M代码如下:
let Source = dedupedetipscsv, // 单独做列类型转换步骤,避免嵌套 #"Transformed ApprovedDate Type" = Table.TransformColumnTypes(Source, {{"ApprovedDate", type text}}, "en-GB"), // 拆分Candidate列,用带最大拆分次数的拆分函数替代原函数,兼容度更高 #"Split Candidate by Space" = Table.SplitColumn(#"Transformed ApprovedDate Type", "Candidate", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv, 1), {"Candidate.1", "Candidate.2"}), // 拆分ApprovedDate列 #"Split ApprovedDate by Space" = Table.SplitColumn(#"Split Candidate by Space", "ApprovedDate", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv, 1), {"ApprovedDate.1", "ApprovedDate.2"}) in #"Split ApprovedDate by Space"
修改说明:
- 所有步骤独立显式声明,ADF解析器可以正确识别每一步的列元数据,避免解析失败
- 把
Splitter.SplitTextByEachDelimiter替换为Splitter.SplitTextByDelimiter,第三个参数传入1表示最多拆分1次,如果你需要从右往左拆分,可以把该参数替换为{1, RelativePosition.FromEnd},兼容度远高于原函数的从右往左拆分参数 - 避免隐式转换导致的元数据丢失问题
内容的提问来源于stack exchange,提问作者nocoyote5374
相关产品推荐
相关产品推荐

