[英]Query JSON nested objects using U-SQL
我試圖從下面獲取國家和類別。 我能夠獲得國家,但不能獲得類別。
示例輸入:
[{
"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);
您必須考慮到數組也包含復雜類型。 此外,您不能只使用像EXTRACT [custom.dimensions] string
這樣的符號,您還必須為此添加迭代步驟,如下所示:
@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”“角色名稱”“類別”
“新加坡”“不適用”“不適用”“Microsoft Windows NT 6.1.7601 Service Pack 1”“Connexx”“Noah 版本”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.