You have to take in account that the array consists of complex types as well. Also, you cannot just use a notation like EXTRACT [custom.dimensions] string
, you have to add itermediate steps for that as well like this:
@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);
This outputs:
"Country" "Province" "City" "OsVersion" "RoleName" "Category"
"Singapore" "N/A" "N/A" "Microsoft Windows NT 6.1.7601 Service Pack 1" "Connexx" "Noah Version"
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…