USQL- JsonArray专栏爆炸

时间:2018-06-14 16:12:48

标签: u-sql

我有一个TSV文件,一列是一个json字符串,它有一些对象。我需要根据jsonarray将行转换为多行。你能指导我提取数据吗?

示例行: 产品ID客户 Azure SQL 465383 [{“客户”:“Dell”,“国家/地区”:“美国”},{“客户”:“HP”,“国家/地区”:“德国”}]

预期产出: 产品ID客户所在国家 Azure SQL 465383 Dell US Azure SQL 465383 HP德国

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以在github here中提供的Microsoft.Analytics.Samples.Formats JSON示例中使用JsonTuple方法。如果您不确定如何安装它们,请按照此处的教程进行操作。

例如,我使用this file来使用此脚本。

REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats]; 

USING Microsoft.Analytics.Samples.Formats.Json;

DECLARE @inputFile string = "/input/input103.tsv";

@input =
    EXTRACT Product string,
            id string,
            Customers string        // JSON column
    FROM @inputFile
    USING Extractors.Tsv(skipFirstNRows:1);


// Convert Customer JSON string to tuple
@working =
    SELECT Product,
           id,
           JsonFunctions.JsonTuple(Customers).Values AS Customers_map
    FROM @input;


// Explode the MAP to get a row per key-value pair
@output =
    SELECT Product,
           id,
           JsonFunctions.JsonTuple(y) ["Customer"] AS Customer,
           JsonFunctions.JsonTuple(y) ["Country"] AS Country
    FROM @working
         CROSS APPLY
             EXPLODE(Customers_map) AS x(y);


OUTPUT @output
TO "/output/output.csv"
USING Outputters.Csv();

我的结果:

Results