首页 文章

在U-SQL中解析json文件

提问于
浏览
6

我正在尝试使用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在Vertex错误时仍然失败

有帮助吗?

2 回答

  • 7

    这可能是因为您在文件的每个新行上都有新的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}";
    

    希望这有助于排序您的问题 .

  • 0

    对于您的信息,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

相关问题