Google bigquery 用于将行数据折叠为JSON或结构的BigQuery函数
我正在寻找一种在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) ] 任何像魔术函数这样的东西都可以将数据打包成某
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)]