Azure Data Factory将JSON中多同类型对象转SQL行
在Azure Data Factory中将嵌套JSON对象转换为数据库行数据
给定的JSON数据中,reports字段包含多个以位置名称为键的同结构对象,需要将每个对象转换为数据库中的一行结构化数据。以下是具体实现步骤:
方法一:使用管道中的Flatten活动
配置数据源
- 创建数据源连接(如Azure Blob存储、HTTP等),读取目标JSON文件。确保JSON的根节点设置正确,能识别到
reports字段。
- 创建数据源连接(如Azure Blob存储、HTTP等),读取目标JSON文件。确保JSON的根节点设置正确,能识别到
添加Flatten活动
- 在ADF管道中添加Flatten活动,将其与数据源连接。
- 在Flatten活动的设置选项卡中:
- 选择
reports作为要展开的层级,ADF会自动识别该字段下的所有键值对对象。 - 设置展开规则为展开每个子对象,将对象内的
location_id、date、h19至h23、peak_hour、total、location_name等字段转换为扁平化的列。
- 选择
配置数据目标
- 添加数据库Sink活动(如Azure SQL Database、SQL Server等),将Flatten活动的输出连接到Sink。
- 完成字段映射,确保每个扁平化列与目标数据库表的列类型匹配(例如
date对应DATE类型,数字字段对应INT类型)。
方法二:使用Data Flow(更灵活的复杂转换)
创建Data Flow
- 添加Source组件,连接到JSON数据源,设置JSON的根路径为
$reports。
- 添加Source组件,连接到JSON数据源,设置JSON的根路径为
转换为数组结构
- 添加Derived Column组件,使用表达式
mapObjectToArray(reports)生成一个新数组列(例如命名为reportsArray)。该表达式会将reports中的键值对转换为包含key(位置名称)和value(对象内容)的数组元素。
- 添加Derived Column组件,使用表达式
展开数组
- 添加Flatten组件,选择
reportsArray作为要展开的数组列,将数组中的每个元素转换为单独的行。
- 添加Flatten组件,选择
提取对象字段
- 添加Derived Column组件,从展开后的
value对象中提取所需字段,例如:location_id = value.location_iddate = value.date- 依次提取
h19至h23、peak_hour、total、location_name等字段。
- 添加Derived Column组件,从展开后的
写入数据库
- 添加Sink组件,连接到目标数据库,完成字段映射后将数据写入指定表。
内容的提问来源于stack exchange,提问作者Md. Yeasin Arafat
相关产品推荐
相关产品推荐

