Azure 使用U-SQL查询JSON嵌套对象
我试图从下面得到国家和类别。 我可以得到国家,但不能得到类别 输入示例:Azure 使用U-SQL查询JSON嵌套对象,azure,azure-data-lake,u-sql,Azure,Azure Data Lake,U Sql,我试图从下面得到国家和类别。 我可以得到国家,但不能得到类别 输入示例: [{ "context": { "location": { "clientip": "0.0.0.0", "continent": "Asia", "country": "Singapore" }, "custom": { "dimensions": [{
[{
"context": {
"location": {
"clientip": "0.0.0.0",
"continent": "Asia",
"country": "Singapore"
},
"custom": {
"dimensions": [{
"Category": "Noah Version"
}]
}
}
}]
我的问题是:
@json =
EXTRACT
[location] string,
[device] string,
[custom.dimensions] string
FROM
@InputFile
USING new JsonExtractor("context");
@CreateJSONTuple =
SELECT
JsonFunctions.JsonTuple([location]) AS LocationData,
JsonFunctions.JsonTuple([device]) AS DeviceData,
JsonFunctions.JsonTuple([custom.dimensions]) AS DimensionData
FROM @json;
@Dataset =
SELECT
LocationData["country"] ?? "NA" AS Country
,LocationData["province"] ?? "NA" AS Province
,LocationData["city"] ?? "N/A" AS City
,DeviceData["osVersion"] ?? "N/A" AS OsVersion
,DeviceData["roleName"] ?? "N/A" AS RoleName
,DimensionData["Category"] ?? "N/A" AS Category
FROM @CreateJSONTuple;
OUTPUT @Dataset
TO @transBlobOutputFile
USING Outputters.Csv(outputHeader:true,quoting:true);
您必须考虑到数组也由复杂类型组成。此外,您不能只使用
提取[custom.dimensions]字符串这样的表示法,您必须为其添加itermediate步骤以及以下步骤:
@json =
EXTRACT location String,
device String,
custom String
FROM @InputFile
USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor("context");
@CreateJSONTuple =
SELECT JsonFunctions.JsonTuple(location) AS LocationData,
JsonFunctions.JsonTuple(device) AS DeviceData,
JsonFunctions.JsonTuple(custom, "dimensions[0]") AS DimensionData
FROM @json;
@result =
SELECT LocationData["country"] ?? "N/A" AS Country,
LocationData["province"] ?? "N/A" AS Province,
LocationData["city"] ?? "N/A" AS City,
DeviceData["osVersion"] ?? "N/A" AS OsVersion,
DeviceData["roleName"] ?? "N/A" AS RoleName,
DimensionData["dimensions[0]"] AS CategoryDimension
FROM @CreateJSONTuple;
@result =
SELECT Country,
Province,
City,
OsVersion,
RoleName,
JsonFunctions.JsonTuple(CategoryDimension) AS CategoryDimension
FROM @result;
@result =
SELECT Country,
Province,
City,
OsVersion,
RoleName,
CategoryDimension["Category"] AS Category
FROM @result;
OUTPUT @result
TO @output
USING Outputters.Csv(outputHeader : true, quoting : true);
这将产生:
“国家”“省”“市”“OsVersion”“RoleName”“类别”
“新加坡”“不适用”“不适用”“Microsoft Windows NT 6.1.7601 Service Pack 1”“Connexx”“Noah版本”
请给出您迄今为止尝试过的代码。Peter我得到的是Country,但不是Category,它是空的。请不要发布脚本链接,而是将代码与一些示例数据和所需的输出示例一起放入问题中。谢谢Peter,我尝试过,但在保存时遇到错误,主要是代码和格式。所以我保留了github链接。请您跟随链接并帮助我。Peter如果我们在索引0处有类别,则此解决方案有效,但如果我们在其他索引处有类别,则此解决方案无效。请提出解决办法。非常感谢你的帮助。