解析 U-SQL 中的 json 文件
Parse json file in U-SQL
我正在尝试使用 USQL 解析以下 Json 文件,但不断出现错误。
Json file@
{"dimBetType_SKey":1,"BetType_BKey":1,"BetTypeName":"Test1"}
{"dimBetType_SKey":2,"BetType_BKey":2,"BetTypeName":"Test2"}
{"dimBetType_SKey":3,"BetType_BKey":3,"BetTypeName":"Test3"}
下面是 USQL 脚本,我正在尝试从上面的文件中提取数据。
REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];
DECLARE @Full_Path string =
"adl://xxxx.azuredatalakestore.net/2017/03/28/00_0_66ffdd26541742fab57139e95080e704.json";
DECLARE @Output_Path = "adl://xxxx.azuredatalakestore.net/Output/Output.csv";
@logSchema =
EXTRACT dimBetType_SKey int
FROM @Full_Path
USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor();
OUTPUT @logSchema
TO @Output_Path
USING Outputters.Csv();
但是 USQL 一直失败并出现顶点错误
有什么帮助吗?
这可能是因为文件的每一行都有新的 JSON 块。这意味着您需要稍微不同地解析它,而不是直接 JSON 文件。
首先尝试使用文本提取器将每个 JSON 元素引入新的行分隔符。像这样...
DECLARE @Full_Path string = "etc"
@RawExtract =
EXTRACT
[RawString] string,
[FileName] string //optional, see below
FROM
@Full_Path
USING
Extractors.Text(delimiter:'\b', quoting : false);
然后将 JSON 与您引用的程序集一起切碎,但使用 JSON 元组方法。像这样...
REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];
@ParsedJSONLines =
SELECT
Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple([RawString]) AS JSONLine,
[FileName]
FROM
@RawExtract
接下来,取出数值。像这样...
@StagedData =
SELECT
JSONLine["dimBetType_SKey"] AS dimBetType_SKey,
JSONLine["BetType_BKey"] AS BetType_BKey,
JSONLine["BetTypeName"] AS BetTypeName
[FileName]
FROM
@ParsedJSONLines;
最后,输出到 CSV 或其他格式。
DECLARE @Output_Path string = "etc"
OUTPUT @StagedData
TO @Output_Path
USING Outputters.Csv();
附带说明一下,您不需要引用完整的数据湖存储路径。分析引擎知道存储的根目录在哪里,因此您可以用这个替换变量...
DECLARE @Full_Path string = "/2017/03/28/{FileName}";
希望这有助于解决您的问题。
请注意,ADF 可以帮助您轻松地将 JSON(JSON 格式)复制为 CSV(文本格式)。说明可参考:
https://docs.microsoft.com/en-us/azure/data-factory/data-factory-faq#specifying-formats
复制向导可以帮助您预览数据并通过 UI 设置管道。
https://docs.microsoft.com/en-us/azure/data-factory/data-factory-copy-data-wizard-tutorial
我正在尝试使用 USQL 解析以下 Json 文件,但不断出现错误。
Json file@
{"dimBetType_SKey":1,"BetType_BKey":1,"BetTypeName":"Test1"}
{"dimBetType_SKey":2,"BetType_BKey":2,"BetTypeName":"Test2"}
{"dimBetType_SKey":3,"BetType_BKey":3,"BetTypeName":"Test3"}
下面是 USQL 脚本,我正在尝试从上面的文件中提取数据。
REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];
DECLARE @Full_Path string =
"adl://xxxx.azuredatalakestore.net/2017/03/28/00_0_66ffdd26541742fab57139e95080e704.json";
DECLARE @Output_Path = "adl://xxxx.azuredatalakestore.net/Output/Output.csv";
@logSchema =
EXTRACT dimBetType_SKey int
FROM @Full_Path
USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor();
OUTPUT @logSchema
TO @Output_Path
USING Outputters.Csv();
但是 USQL 一直失败并出现顶点错误
有什么帮助吗?
这可能是因为文件的每一行都有新的 JSON 块。这意味着您需要稍微不同地解析它,而不是直接 JSON 文件。
首先尝试使用文本提取器将每个 JSON 元素引入新的行分隔符。像这样...
DECLARE @Full_Path string = "etc"
@RawExtract =
EXTRACT
[RawString] string,
[FileName] string //optional, see below
FROM
@Full_Path
USING
Extractors.Text(delimiter:'\b', quoting : false);
然后将 JSON 与您引用的程序集一起切碎,但使用 JSON 元组方法。像这样...
REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];
@ParsedJSONLines =
SELECT
Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple([RawString]) AS JSONLine,
[FileName]
FROM
@RawExtract
接下来,取出数值。像这样...
@StagedData =
SELECT
JSONLine["dimBetType_SKey"] AS dimBetType_SKey,
JSONLine["BetType_BKey"] AS BetType_BKey,
JSONLine["BetTypeName"] AS BetTypeName
[FileName]
FROM
@ParsedJSONLines;
最后,输出到 CSV 或其他格式。
DECLARE @Output_Path string = "etc"
OUTPUT @StagedData
TO @Output_Path
USING Outputters.Csv();
附带说明一下,您不需要引用完整的数据湖存储路径。分析引擎知道存储的根目录在哪里,因此您可以用这个替换变量...
DECLARE @Full_Path string = "/2017/03/28/{FileName}";
希望这有助于解决您的问题。
请注意,ADF 可以帮助您轻松地将 JSON(JSON 格式)复制为 CSV(文本格式)。说明可参考: https://docs.microsoft.com/en-us/azure/data-factory/data-factory-faq#specifying-formats
复制向导可以帮助您预览数据并通过 UI 设置管道。 https://docs.microsoft.com/en-us/azure/data-factory/data-factory-copy-data-wizard-tutorial