使用Azure Data Factory将API的JSON数据加载至ADX(Kusto)的问题
解决ADF提取JSON content数组并写入ADX单行的方案
步骤1:定位并提取JSON中的content数组
Web活动返回的JSON结构示例:
{ "content": [{"id":1, "value":100}, {"id":2, "value":200}], "numOfPages": 1, "totalElements": 2 }
直接用ADF表达式定位content数组:@activity('你的Web活动名称').output.content
步骤2:拆分数组并写入ADX表
方案A:ForEach活动单条写入
- 添加ForEach活动,将
Items属性设置为上述表达式,可选择并行(默认,效率更高)或串行执行。 - 在ForEach内部添加Azure Data Explorer Command活动,输入Kusto命令:
其中.append Readings <| print Readings=dynamic('@{string(item())}')item()代表当前遍历的Reading实体,转成字符串后再转为ADX的dynamic类型,直接写入Readings列。
方案B:Copy活动批量写入(推荐)
- 添加Copy活动,源选择Inline数据集,格式选JSON,在Source的JSON path中填入
$..content,直接提取数组作为数据源。 - 目标选择ADX数据集,指定目标表名。在Mapping中,将源的整个JSON对象映射到目标表的Readings列(源列选
$,目标列选Readings,类型匹配dynamic)。 - 运行Copy活动,ADF会自动将content数组的每个元素拆分为一行写入ADX。
后续扩展列的处理
当前Readings列存储完整JSON对象,后续扩展列可直接在ADX中执行Kusto命令拆分:
Readings | extend ReadingId = Readings.id, ReadingValue = Readings.value, ReadingTime = Readings.timestamp | project-away Readings
也可以在ADF中添加Derived Column活动,提前拆分JSON字段后写入多列的ADX表。
内容的提问来源于stack exchange,提问作者Matorow
相关产品推荐
相关产品推荐

