基于Azure Logic Apps的ADLS Gen2 JSON转XML导入Azure SQL工作流咨询
Azure Logic Apps 实现ADLS Gen2 JSON转XML导入Azure SQL 完整工作流
一、整体流程
触发器监控ADLS Gen2目标文件夹的JSON文件 → 读取文件内容 → 解析JSON结构 → 按特定值过滤/转换为XML → 导入Azure SQL数据库
二、各步骤详细配置
1. 触发器:Azure Data Lake Storage Gen2 - 当文件添加或修改时(属性)
- 核心配置:
- 存储账户名称:选择你的ADLS Gen2账户
- 容器名称:指定目标容器
- 文件夹路径:填写要监控的具体文件夹路径
- 可选过滤:在
触发条件中添加文件扩展名 等于 .json,仅触发JSON文件的处理
2. 操作1:Azure Data Lake Storage Gen2 - 获取文件内容
- 配置:
- 存储账户名称:与触发器一致
- 文件路径:从触发器动态内容中选择
文件路径
- 作用:读取目标JSON文件的原始文本内容,为后续转换做准备
3. 操作2:Parse JSON(解析JSON结构)
- 配置:
- Content:选择
获取文件内容操作的内容输出 - Schema:点击
使用示例有效负载生成,粘贴你的JSON示例自动生成Schema,示例Schema如下:{ "type": "object", "properties": { "id": {"type": "string"}, "specificValue": {"type": "string"}, "details": { "type": "object", "properties": { "name": {"type": "string"}, "age": {"type": "integer"} } } } }
- Content:选择
- 作用:将非结构化的JSON文本转为结构化对象,方便后续按字段过滤和转换
4. 操作3:Compose - JSON转XML(按特定值处理)
- 根据你的需求选择对应表达式:
- 基础转换(直接转XML):
xml(json('{"Root": @body('Parse JSON')}')) - 按特定值过滤转换(仅保留
specificValue为target的条目,若JSON是数组):xml(json(concat('{"Root": {"Items": ', @filter(body('Parse JSON'), item()?['specificValue'] == 'target'), '}}')))
- 基础转换(直接转XML):
- 表达式说明:
json():将字符串格式的JSON结构转为可处理的JSON对象xml():将JSON对象转换为标准XML格式,需确保有根节点(如<Root>)filter():筛选符合特定值的JSON条目,适用于JSON为数组的场景
5. 操作4:Azure SQL Database - 执行SQL语句
- 配置:
- SQL服务器名称:你的Azure SQL服务器地址
- 数据库名称:目标数据库
- 认证方式:选择SQL认证,填写用户名和密码
- SQL查询:编写XML导入语句,示例如下:
DECLARE @XMLData XML = @xmlContent; INSERT INTO YourTargetTable (Id, SpecificValue, Name, Age) SELECT T.c.value('(id)[1]', 'NVARCHAR(50)'), T.c.value('(specificValue)[1]', 'NVARCHAR(100)'), T.c.value('(details/name)[1]', 'NVARCHAR(100)'), T.c.value('(details/age)[1]', 'INT') FROM @XMLData.nodes('/Root') AS T(c);
- 动态参数:将
Compose - JSON转XML的输出绑定到@xmlContent参数
三、针对你现有工作流的修正建议
- 若缺少
Parse JSON步骤,需补充:未解析的JSON文本直接转换可能导致XML结构混乱,无法按字段提取数据 - 检查XML转换的根节点:SQL的OPENXML需要明确的根节点,确保转换后的XML包含如
<Root>的顶层节点 - SQL语句节点路径匹配:确保SQL中
value()函数的节点路径与转换后的XML结构完全一致,避免数据插入失败
内容的提问来源于stack exchange,提问作者frezsha
相关产品推荐
相关产品推荐

