You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:45:25