Azure Synapse管道中解析XML文本为行集的方案咨询
解决Azure Synapse Data Flow解析XML文本为多行多列的问题
问题根源
你遇到的Parse转换仅返回最后一个元素的情况,是因为默认Parse转换会将XML解析为单个结构化对象,不会自动识别并展开其中的重复节点数组,需要结合派生列与展开转换完成完整的行集解析。
具体实现步骤
1. 用派生列将XML文本转为数组对象
假设源表中存储XML的列名为XmlContent,XML结构示例如下:
<Root> <Customers> <Customer> <CUSTOMERNO>121</CUSTOMERNO> <NAME>张三</NAME> </Customer> <Customer> <CUSTOMERNO>122</CUSTOMERNO> <NAME>李四</NAME> </Customer> </Customers> </Root>
添加派生列转换,使用xml()函数将文本转为包含重复节点的数组,表达式示例:
xml(Customers, XmlContent)
将生成的列命名为CustomerArray,该列类型为数组,对应XML中所有<Customer>节点的集合。
2. 用展开(Flatten)转换拆分数组为多行
添加Flatten转换,选择CustomerArray作为「展开的数组」列,此时原单行数据会被拆分为与<Customer>节点数量一致的多行,每行对应一个独立的<Customer>节点。
3. 解析单个节点为目标列
添加Parse转换,选择展开后的单个节点列,设置解析格式为XML,直接映射XML节点到目标列:
- 将
CUSTOMERNO映射到目标表的对应列(按需设置数据类型) - 将
NAME映射到目标表的对应列
4. 加载至Synapse SQL专用池
最后通过Sink转换,将解析完成的行集写入专用池的目标表即可。
额外注意事项
- 若XML存在嵌套层级,需逐层处理:先展开上层数组节点,再解析下层嵌套结构
- 若XML包含命名空间,需在
xml()函数中指定,示例:xml(Customers, XmlContent, 'xmlns:ns="http://your-namespace"') - 每一步都可通过Data Flow的预览功能验证输出,确保节点解析和展开符合预期
内容的提问来源于stack exchange,提问作者niko
相关产品推荐
相关产品推荐

