BigQuery从JSON文件键获取列

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

我正面临一个与我的一个项目有关的问题。以下是我想做的总结:

我每天要处理多个文件(每个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的值,第二列和第三列包含受众(键)和片段(键)(换句话说,每个受众中包含哪些片段)之间的所有可能组合

我想这样做是为了计算每个观众的每个片段中的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