在Google Bigquery中,我的数据集的数据分散在int_value和double值之间,如何合并
-------------------------------------------------------------------------
|user_id | params.string_value | params.int_value | params.double_value |
-------------------------------------------------------------------------
| 12 | null | null | 121 |
| 12 | Tom | null | null |
| 12 | null | null | 141 |
| 12 | Kim | null | null |
| 13 | null | null | 961 |
| 13 | Jack | null | null |
| 14 | null | null | 31 |
| 14 | Jerry | null | null |
-------------------------------------------------------------------------
需要结果
-------------------------------------------------------------------------
|user_id | params.string_value | params.int_value | params.double_value |
-------------------------------------------------------------------------
| 12 | Tom | null | 121 |
| 12 | Kim | null | 141 |
| 13 | Jack | null | 961 |
| 14 | Jerry | null | 31 |
-------------------------------------------------------------------------
相同的user_id可能有多个数据,但参数不同。 params.int_value | params.double_value
我想在Big Query中合并所有具有相同user_id的数据
答案 0 :(得分:1)
以下是用于BigQuery标准SQL
#standardSQL
SELECT user_id, STRUCT(string_value, int_value, double_value) params
FROM (
SELECT user_id,
ARRAY_AGG(params.string_value IGNORE NULLS) string_values,
ARRAY_AGG(params.int_value IGNORE NULLS) int_values,
ARRAY_AGG(params.double_value IGNORE NULLS) double_values
FROM `project.dataset.table`
GROUP BY user_id
)
LEFT JOIN UNNEST(string_values) string_value WITH OFFSET
LEFT JOIN UNNEST(int_values) int_value WITH OFFSET USING(OFFSET)
LEFT JOIN UNNEST(double_values) double_value WITH OFFSET USING(OFFSET)
如果要应用于问题的样本数据
WITH `project.dataset.table` AS (
SELECT 12 user_id, STRUCT<string_value STRING, int_value INT64, double_value FLOAT64>(NULL, NULL, 121) AS params UNION ALL
SELECT 12, STRUCT('Tom', NULL, NULL) UNION ALL
SELECT 12, STRUCT(NULL, NULL, 141) UNION ALL
SELECT 12, STRUCT('Kim', NULL, NULL) UNION ALL
SELECT 13, STRUCT(NULL, NULL, 961) UNION ALL
SELECT 13, STRUCT('Jack', NULL, NULL) UNION ALL
SELECT 14, STRUCT(NULL, NULL, 31) UNION ALL
SELECT 14, STRUCT('Jerry', NULL, NULL)
)
结果是
Row user_id params.string_value params.int_value params.double_value
1 12 Tom null 121.0
2 12 Kim null 141.0
3 13 Jack null 961.0
4 14 Jerry null 31.0
答案 1 :(得分:0)
您可以使用MAX
函数:
SELECT user_id,
MAX(params.string_value) as string_value,
MAX(params.int_value) as int_value,
MAX(params.double_value) as double_value
FROM your_dataset.your_table
GROUP BY user_id
MAX
不考虑NULL
的值。 MIN
都不这样做,因此您也可以使用此一个!