如何在BigQuery中将平面/关系表转换为键/值对表?

时间:2017-02-22 11:45:47

标签: sql google-bigquery nosql

我有一个表,其中多行具有相同的数据,除了一列在所有重复行中具有唯一值。

示例:

userid, article_count, test_count, total_articles,total_tests,exam_id, exam_score

- 00016320-452b-11e6-9a4a-252aad95e99b,38,1,106,88,e9c196a1-4ae6-11e5-bc68-8620ffdeb79c,1
- 00016320-452b-11e6-9a4a-252aad95e99b,38,1,106,88,8223ff18-d538-11e5-80ff-b0086ec8f4cd,1
- 00016320-452b-11e6-9a4a-252aad95e99b,38,1,106,88,be2ac525-3909-11e6-a224-56a308185daf,1

我希望每个用户在表格中有一行,并将exam_id,exam_score视为BigQuery中的键/值对或记录。 我将考试视为具有两个子字段的记录:exam.exam_id和exam.score。

输出如下:

userid, article_count, test_count, total_articles,total_tests,exam.exam_id, exam.score

- 00016320-452b-11e6-9a4a-252aad95e99b,38,1,106,88,e9c196a1-4ae6-11e5-bc68-8620ffdeb79c,1
                                                   8223ff18-d538-11e5-80ff-b0086ec8f4cd,1
                                                   be2ac525-3909-11e6-a224-56a308185daf,1      

如何将表格转换为提供的结构?

1 个答案:

答案 0 :(得分:3)

如何将array_agg()与结构一起使用?

select userid, article_count, test_count, total_articles, total_tests,    
       array_agg(struct(exam_id as 'exam_id', exam_score as 'exam_score')) as exams
from t
group by userid, article_count, test_count, total_articles, total_tests