MZE*_*ZEN 2 xml azure-logic-apps azure-data-factory-2
我有带有嵌套元素的复杂 XML 文件。我构建了一个过程来处理使用 SSIS 和 T-SQL。我们使用 Azure 数据工厂,我想探索将 XML 文件转换为 JSON 或 CSV,因为 ADF 支持这些文件,而 XML 不支持。
看来逻辑应用程序是一种选择。有没有人在使用 XML 并在管道内进行转换方面有其他运气?
当前工作流程:从文件夹中提取 XML 文件,放到网络驱动器上,将 XML 批量插入到暂存行中,将 XML 解析为各种 SQL 表进行分析。
样本:
<HEADER>
<SurveyID> 1234 </SURVEYID>
<RESPONSES>
<VAR>Question1</VAR>
<VALUE>Answer1</VALUE>
</RESPONSES>
<RESPONSES>
<VAR>Question2</VAR>
<VALUE>Answer2</VALUE>
</RESPONSES>
<SurveyID> 1234 </SURVEYID>
<RESPONSES>
<VAR>Question1</VAR>
<VALUE>DifferentAnswer</VALUE>
</RESPONSES>
</HEADER>
Run Code Online (Sandbox Code Playgroud)
注意:我不需要知道如何解析 XML,这就完成了。我也知道您可以在 ADF 中执行 SSIS。我正在寻找整个过程的替代方案。
我不确定为什么这个问题被否决了——几个月前我也有类似的需求。由于我们收到的 XML 格式不正确,甚至无法正确解析,这种情况更加恶化。为了解决这个问题,我编写了一个 .NET 控制台应用程序并将其部署到 Azure Batch。它从 Blob 存储读取 XML,更正格式错误,然后解析 XML 并将其输出到 Blob 存储中的 JSON 文件。ADF 通过“自定义”活动支持 Azure Batch,因此它可以直接插入我们的管道。根据您的数据结构,如果更合适,您可以将其输出到 CSV。
从 ADF 使用 Azure Batch 的棘手之处在于传递和处理参数数据。在 ADF 配置中,这些列在“扩展属性”下:

这些属性在运行时可用于名为“activity.json”的 JSON 文件中的批处理作业:在控制台应用程序中,您需要访问 JSON 文件以读取扩展属性:
var activity_json = File.ReadAllText("activity.json");
dynamic activity = JsonConvert.DeserializeObject(activity_json);
parameters.Add("alertId", activity.typeProperties.extendedProperties.AlertId.ToString());
parameters.Add("hashKey", activity.typeProperties.extendedProperties.HashKey.ToString());
parameters.Add("startTime", activity.typeProperties.extendedProperties.StartTime.ToString());
parameters.Add("endTime", activity.typeProperties.extendedProperties.EndTime.ToString());
Run Code Online (Sandbox Code Playgroud)
属性名称区分大小写。[请注意,在此示例中,我将它们写入“参数”字典 - 我这样做是为了可以在本地或在 Azure Batch 中运行控制台应用程序。] 使用 Azure Batch 还有一些其他“有趣”的方面,但是这是我认为最大的障碍。