如何在 Google Big Query 中展平一行中的值
How to flatten values in a row in Google Big Query
伙计们
我的大查询数据有问题。我有一个像 pic #1 这样的数据集,我需要对我的用户进行排名并将他们的排名注释分组在一个独特的行中(如 pic #2)。需要说明的是,我的 ranking
列类型是 int
,而不是 array
。
是否可以处理这个 w/bigquery 或者我是否需要将这个数据集传输到 python 并在那里进行转换?
图片 #1 原始数据集
图片 #2 分组和格式化的数据集
以下是 BigQuery 标准的示例 SQL
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'a' user, 10 ranking UNION ALL
SELECT 'b', 2 UNION ALL
SELECT 'a', 12 UNION ALL
SELECT 'a', 14 UNION ALL
SELECT 'c', 22 UNION ALL
SELECT 'd', 21
)
SELECT
user,
MAX(ranking) AS ranking_max,
STRING_AGG(CAST(ranking AS STRING)) ranking_list
FROM `project.dataset.table`
GROUP BY user
结果
Row user ranking_max ranking_list
1 a 14 10,12,14
2 b 2 2
3 c 22 22
4 d 21 21
注意:如果您需要订购 ranking_list
- 您可以在 STRING_AGG
中使用 ORDER BY
,如下所示
STRING_AGG(CAST(ranking AS STRING) ORDER BY ranking) ranking_list
伙计们
我的大查询数据有问题。我有一个像 pic #1 这样的数据集,我需要对我的用户进行排名并将他们的排名注释分组在一个独特的行中(如 pic #2)。需要说明的是,我的 ranking
列类型是 int
,而不是 array
。
是否可以处理这个 w/bigquery 或者我是否需要将这个数据集传输到 python 并在那里进行转换?
图片 #1 原始数据集
图片 #2 分组和格式化的数据集
以下是 BigQuery 标准的示例 SQL
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'a' user, 10 ranking UNION ALL
SELECT 'b', 2 UNION ALL
SELECT 'a', 12 UNION ALL
SELECT 'a', 14 UNION ALL
SELECT 'c', 22 UNION ALL
SELECT 'd', 21
)
SELECT
user,
MAX(ranking) AS ranking_max,
STRING_AGG(CAST(ranking AS STRING)) ranking_list
FROM `project.dataset.table`
GROUP BY user
结果
Row user ranking_max ranking_list
1 a 14 10,12,14
2 b 2 2
3 c 22 22
4 d 21 21
注意:如果您需要订购 ranking_list
- 您可以在 STRING_AGG
中使用 ORDER BY
,如下所示
STRING_AGG(CAST(ranking AS STRING) ORDER BY ranking) ranking_list