BigQuery从JSON文件键获取列
我正面临一个与我的一个项目有关的问题。以下是我想做的总结: 我每天要处理多个文件(每个2Go),其中包含以下摘录(无标题): 我希望使用bigquery获得此结果:BigQuery从JSON文件键获取列,json,google-bigquery,Json,Google Bigquery,我正面临一个与我的一个项目有关的问题。以下是我想做的总结: 我每天要处理多个文件(每个2Go),其中包含以下摘录(无标题): 我希望使用bigquery获得此结果: id|audiences|segments abcdefg|aud1|seg1 abcdefg|aud1|seg2 abcdefg|aud1|seg3 abcdefg|aud1|seg4 abcdefg|aud2|seg1 abcdefg|aud2|seg2 abcdefg|aud2|seg3 abcdefg|aud2|seg4
id|audiences|segments
abcdefg|aud1|seg1
abcdefg|aud1|seg2
abcdefg|aud1|seg3
abcdefg|aud1|seg4
abcdefg|aud2|seg1
abcdefg|aud2|seg2
abcdefg|aud2|seg3
abcdefg|aud2|seg4
其中,第一列包含键id的值,第二列和第三列包含受众(键)和片段(键)(换句话说,每个受众中包含哪些片段)之间的所有可能组合
我想这样做是为了计算每个观众的每个片段中的ID数量
对于一些循环和JSON解析,这是完全可行的。然而,由于我需要快速处理这个问题,所以我考虑使用bigquery来完成这个任务
我有第一个脚本,它将文件上传到bq表中(每一行都是一个字符串),并提取字段,但我不知道如何获得最终结果
有没有办法做到这一点
谢谢大家的帮助
下面是针对BigQuery标准SQL的
#standardSQL
SELECT
JSON_EXTRACT_SCALAR(line, '$.id') id,
TRIM(SPLIT(aud_kv, ':')[OFFSET(0)], '"') audiences,
TRIM(SPLIT(seg_kv, ':')[OFFSET(0)], '"') segments
FROM `project.dataset.table`,
UNNEST(SPLIT(TRIM(JSON_EXTRACT(line, '$.key1.key2.audiences'),'{}'))) aud_kv,
UNNEST(SPLIT(TRIM(JSON_EXTRACT(line, '$.key1.key2.segments'),'{}'))) seg_kv
如果要应用于问题中的样本数据,则输出为
Row id audiences segments
1 abcdefg aud1 seg1
2 abcdefg aud1 seg2
3 abcdefg aud1 seg3
4 abcdefg aud1 seg4
5 abcdefg aud2 seg1
6 abcdefg aud2 seg2
7 abcdefg aud2 seg3
8 abcdefg aud2 seg4
Row id audiences segments
1 abcdefg aud1 seg1
2 abcdefg aud1 seg2
3 abcdefg aud1 seg3
4 abcdefg aud1 seg4
5 abcdefg aud2 seg1
6 abcdefg aud2 seg2
7 abcdefg aud2 seg3
8 abcdefg aud2 seg4