1

我有一个流分析作业,它从外部源获取数据(我对数据的格式没有发言权)。我正在尝试将数据导入我的数据湖,并存储为 JSON。这工作正常,但我也想以 CSV 格式获取输出,这就是我遇到问题的地方。

由于输入数据有一个数组作为列之一,因此在导入 JSON 时,它会识别它并提供正确的数据,即将它们放在括号 [A、B、C] 中,但是当我在 CSV 中使用它时,我会得到表示的列作为“数组”这个词。我想我会将它转换为 XML,使用 STUFF 并将它们放在一行中,但它不喜欢在 CROSS APPLY 中使用 SELECT 语句。

有没有人使用流分析将数据导入 CSV,具有数组列?如果是这样,您是如何设法导入数组值的?

样本数据:

[
    {"GID":"10","UID":1,"SID":"5400.0","PG:["75aef","e5f8e"]}, 
    {"GID":"10","UID":2,"SID":"4400.0","PG:["75aef","e5f8e","6d793"]}
]

PG 是我要提取的列,因此输出 CSV 应该类似于。

GID|UID|SID|PG
10|1|5400.0|75aef,e5f8e
10|2|4400.0|75aef,e5f8e,6d793

这是我正在使用的查询,

SELECT 
    D.GID ,
    D.UID ,
    D.SID ,
    A.ArrayValue
FROM 
    dummy AS D
    CROSS APPLY GetArrayElements(D.PG) AS A

正如你所想象的,这给了我这种格式的结果。

GID|UID|SID|PG
10|1|5400.0|75aef
10|1|5400.0|e5f8e
10|2|4400.0|75aef
10|2|4400.0|e5f8e
10|2|4400.0|6d793
4

1 回答 1

1

正如 Pete M 所说,您可以尝试创建一个JavaScript 用户定义函数来将数组转换为字符串,然后您可以在查询中调用此用户定义函数。

JavaScript 用户定义函数:

function main(inputobj) {
    var outstring = inputobj.toString();
    return outstring;
}

在查询中调用 UDF:

SELECT
    TI.GID,TI.UID,TI.SID,udf.extractdatafromarray(TI.PG)
FROM
   [TEST-SA-DEMO-BLOB-Input] as TI

结果:

在此处输入图像描述

于 2017-05-25T07:49:20.353 回答