流分析 GetArrayElements 作为字符串
Stream Analytics GetArrayElements as String
我有一个从外部源获取数据的流分析作业(我对数据的格式化方式没有发言权)。我正在尝试将数据导入我的数据湖,存储为 JSON。这工作正常,但我也想以 CSV 格式获取输出,这是我遇到麻烦的地方。
由于输入数据有一个数组作为列之一,当在 JSON 中导入时,它会识别它并提供正确的数据,即将它们放在方括号 [A、B、C] 中,但是当我在 CSV 中使用它,我得到表示为单词 "Array" 的列。我想我会将其转换为 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
正如 Pete M 所说,您可以尝试创建一个 JavaScript user-defined function 来将数组转换为字符串,然后您可以在查询中调用这个用户定义的函数。
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
结果:
我有一个从外部源获取数据的流分析作业(我对数据的格式化方式没有发言权)。我正在尝试将数据导入我的数据湖,存储为 JSON。这工作正常,但我也想以 CSV 格式获取输出,这是我遇到麻烦的地方。
由于输入数据有一个数组作为列之一,当在 JSON 中导入时,它会识别它并提供正确的数据,即将它们放在方括号 [A、B、C] 中,但是当我在 CSV 中使用它,我得到表示为单词 "Array" 的列。我想我会将其转换为 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
正如 Pete M 所说,您可以尝试创建一个 JavaScript user-defined function 来将数组转换为字符串,然后您可以在查询中调用这个用户定义的函数。
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
结果: