如何在Azure流分析中聚合多个阵列

问题描述

我有一个看起来像这样的表:

"A" : [1,2,3],"A" : [4,5,6],"A" : [7,8,9],"B" : [10,11,12]
"B" : [13,14,15]
"B" : [16,17,18]

我需要它看起来像这样:

"A" : [1,3,4,6,7,12,13,15,16,18]

如何在流分析中根据其字母合并阵列?我尝试过的所有汇总函数都无济于事。

谢谢-

解决方法

我认为这样的事情

drop table if exists dbo.test_table;
go
create table dbo.test_table(
  letter        char(3) not null,string        varchar(20) not null);

insert dbo.test_table(letter,string) values
('"A"','[1,2,3]'),('"A"','[4,5,6]'),'[7,8,9]'),('"B"','[10,11,12]'),'[12,14,15]'),'[16,17,18]');

select letter,concat('[',string_agg(cast(intg.value as varchar(9)),',') within group (order by intg.value),']') colName
from dbo.test_table t
     cross apply
     string_split(substring(string,len(string)-2),') intg
group by letter;

结果

letter  colName
"A"     [1,3,4,6,7,9]
"B"     [10,12,15,16,18]
,

最好的方法是将GROUP BY 并使用COLLECT()作为汇总。这将给您{name:“ A”,val:[[1,3],[4,6],[7,9]]},...

然后使用JavaScript UDF展平数组数组。

以下是一些文档链接:

https://docs.microsoft.com/en-us/stream-analytics-query/collect-azure-stream-analytics

https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-javascript-user-defined-functions

谢谢!