使用Azure数据工厂将JSON从REST API加载到ADX(Kusto)

yhived7q  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(73)

我正面临以下问题。我想从API中下载JSON格式的数据。它的schema是这样的:

{'content':[{'id':12345,
'date':2023-07-25,
-more fields-
'car':{'Ford':{'color','year'}, 'Suzuki':{'color','year'}},
},
{
'id':45678,
'date':2023-07-24,
-more fields-
'car':{'Ford':{'color','year'}, 'Suzuki':{'color','year'}}
},
{
'id':98765,
'date':2023-07-23,
-more fields-
'car':{'Ford':{'color','year'}, 'Suzuki':{'color','year'}}
}],
'numOfPages':100,
'totalElements':1000
}

字符串
因此,返回的JSON有三个字段,numOfPagestotalElements描述了整个数据集,但在['content']中,我可以访问具有相同模式的多个数据实体,即Readings。我想将数据加载到Kusto Data Explorer表中,其中单个实体如下:

{'id':12345,
'date':2023-07-25,
-more fields-
'car':{'Ford':{'color','year'}, 'Suzuki':{'color','year'}},
}


进入单列,具有不同ID的数据在不同的行中。我使用ADF web activities从API中收集这种格式的数据,但我很难进行适当的Map,因为不清楚如何访问JSON 'Content'字段的根并将实体划分为不同的行,因此如果我的JSON在'Content'中有5个实体,它将在Kusto Table中生成5行,该模式现在是单列Readings,稍后我将使用ADF元数据添加更多列。

frebpwbc

frebpwbc1#

我用下面的示例数据尝试了你的场景。

{
    "content":
    [
        {
            "id":12345,
            "dat":"2023-07-25",
            "car":
            {
                "Ford":
                {
                    "color":"yellow",
                    "year":"2012"
                }, 
                "Suzuki":
                {
                    "color":"red",
                    "year":"2013"
                }
            }
        },
        {
        "id":45678,
        "dat":"2023-07-24",
        "car":
            {
                "Ford":
                {
                    "color":"Blue",
                    "year":"2012"
                }, 
                "Suzuki":
                {
                    "color":"whilte",
                    "year":"2013"
                }
            }
        },
        {
        "id":98765,
        "dat":"2023-07-23",
        "car":
            {
                "Ford":
                {
                    "color":"Black",
                    "year":"2012"
                }, 
                "Suzuki":
                {
                    "color":"Violete",
                    "year":"2013"
                }
            }
        }
    ],
"numOfPages":100,
"totalElements":1000
}

字符串
在这里,如果你想得到数组Content作为表中的行值,那么列值numOfPagestotalElements也将作为数组中的行数重复。
在这里,我使用高级编辑器在复制活动中给出了以下Map。


的数据
根据您的要求给予目标的数据类型。但是对于像car这样的列,只能使用字符串类型。当我使用dynamic并禁用上面的**Map complex values to string**选项时,我得到了下面的错误,说不支持该对象。



因此,我在目标中为对象列选择了字符串数据类型。

目标表:



在ADX中使用parse_json()将JSON字符串用作JSON对象。


相关问题