Google bigquery 用于将行数据折叠为JSON或结构的BigQuery函数

Google bigquery 用于将行数据折叠为JSON或结构的BigQuery函数,google-bigquery,Google Bigquery,我正在寻找一种在BigQuery中按许多列进行分组的方法,但要保留比聚合行更详细的信息 数据: 我的查询将是这样的: SELECT id, TAKE_ANY(a), sum(b), count(d), max(d), MAGIC(a,b,c,d) FROM table GROUP BY 1 我想要的输出是这样的: 1, 1, 2, 1, 3, [ (1,2,1,3)] 2, 2, 5, 2, 5, [ (1,2,3,4), (2,3,4,5) ] 任何像魔术函数这样的东西都可以将数据打包成某

我正在寻找一种在BigQuery中按许多列进行分组的方法,但要保留比聚合行更详细的信息

数据:

我的查询将是这样的:

SELECT id, TAKE_ANY(a), sum(b), count(d), max(d), MAGIC(a,b,c,d) FROM table GROUP BY 1
我想要的输出是这样的:

1, 1, 2, 1, 3, [ (1,2,1,3)]
2, 2, 5, 2, 5, [ (1,2,3,4), (2,3,4,5) ]

任何像魔术函数这样的东西都可以将数据打包成某种结构?

在选择列表中,将ARRAY\u AGG与STRUCT函数一起使用。比如说,

SELECT id, ARRAY_AGG(STRUCT(a, b, c, d))
FROM table
GROUP BY id
这将返回一个数组,其中包含每个组中这些列的所有值。

下面的选项(对于BigQuery标准SQL)适用于以下情况:
[(1,2,3,4),(2,3,4,5)]
实际上指的是字符串与结构数组(问题不太清楚,但我认为可能)

如果要应用以下问题中的虚拟数据

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 2 id, 1 a, 2 b, 3 c, 4 d UNION ALL
  SELECT 2, 2, 3, 4, 5 UNION ALL 
  SELECT 1, 1, 2, 1, 3 
)
SELECT 
  id, 
  ANY_VALUE(a) any_a, 
  SUM(b) sum_b, 
  COUNT(d) count_d, 
  MAX(d) max_d, 
  FORMAT('[%s]', STRING_AGG(FORMAT('(%i,%i,%i,%i)', a, b, c, d), ',')) a_b_c_d
FROM `project.dataset.table` 
GROUP BY id
ORDER BY id   
结果将是

Row id  any_a   sum_b   count_d max_d   a_b_c_d  
1   1   1       2       1       3       [(1,2,1,3)]  
2   2   1       5       2       5       [(1,2,3,4),(2,3,4,5)]    
#standardSQL
WITH `project.dataset.table` AS (
  SELECT 2 id, 1 a, 2 b, 3 c, 4 d UNION ALL
  SELECT 2, 2, 3, 4, 5 UNION ALL 
  SELECT 1, 1, 2, 1, 3 
)
SELECT 
  id, 
  ANY_VALUE(a) any_a, 
  SUM(b) sum_b, 
  COUNT(d) count_d, 
  MAX(d) max_d, 
  FORMAT('[%s]', STRING_AGG(FORMAT('(%i,%i,%i,%i)', a, b, c, d), ',')) a_b_c_d
FROM `project.dataset.table` 
GROUP BY id
ORDER BY id   
Row id  any_a   sum_b   count_d max_d   a_b_c_d  
1   1   1       2       1       3       [(1,2,1,3)]  
2   2   1       5       2       5       [(1,2,3,4),(2,3,4,5)]