如何使用Azure Data Factory转换含属性带点的复杂JSON列的SQL查询结果?
解决Azure Data Factory数据流解析带点号的JSON属性的问题
这个问题我之前在处理ADF数据流的JSON解析时也踩过坑!核心原因是你的JSON属性名dt.topic里包含了点号,ADF的表达式解析器会把点符号默认当成嵌套属性的访问符——它会误以为你要访问一个名为dt的对象下的topic子属性,但实际上你的JSON里dt.topic是一个独立的、完整的属性名,根本不是嵌套结构,所以直接用dt.topic as string肯定会报错。
正确的解决方法
你只需要把带特殊字符(比如点号、空格、特殊符号)的属性名用方括号包裹来访问,替换原来的点符号语法就行:
- 对于正常属性
key,继续用key as string完全没问题 - 对于带点号的属性
dt.topic,把表达式改成:['dt.topic'] as string
举个具体的映射例子:
假设你通过Parse Transform把原始的Json列解析成了结构化对象,在映射输出列时:
- 输出列
key_col的表达式写:key as string - 输出列
dt_topic_col的表达式写:['dt.topic'] as string
为什么“检测类型”功能也会出错?
ADF的Detect Type工具是基于标准JSON结构(属性名无特殊字符)来自动生成表达式的,它没办法识别属性名里的点号是属性名的一部分,反而会把它当成嵌套结构的分隔符,所以生成的dt.topic as string表达式自然会和你手动写的一样报错。
改完表达式之后,你再点击“保存并完成”应该就能正常通过验证了,数据流也能正确解析出dt.topic的属性值。
内容的提问来源于stack exchange,提问作者Krumelur
相关产品推荐
相关产品推荐

