【发布时间】:2018-11-14 20:09:26
【问题描述】:
伙计们
我在大查询中的数据有问题。我有一个像 pic #1 这样的数据集,我需要对我的用户进行排名并将他们的排名注释分组在一个唯一的行中(如 pic #2)。需要明确的是,我的ranking 列类型是int,而不是array。
是否可以使用 bigquery 处理此问题,或者我是否需要将此数据集传输到 python 并在那里进行转换?
PIC #1 原始数据集
PIC #2 分组和格式化数据集
【问题讨论】:
伙计们
我在大查询中的数据有问题。我有一个像 pic #1 这样的数据集,我需要对我的用户进行排名并将他们的排名注释分组在一个唯一的行中(如 pic #2)。需要明确的是,我的ranking 列类型是int,而不是array。
是否可以使用 bigquery 处理此问题,或者我是否需要将此数据集传输到 python 并在那里进行转换?
PIC #1 原始数据集
PIC #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
【讨论】: