BigQuery 从 JSON 文件键中获取列
Posted
技术标签:
【中文标题】BigQuery 从 JSON 文件键中获取列【英文标题】:BigQuery get columns from JSON file keys 【发布时间】:2020-09-05 22:24:18 【问题描述】:我面临一个与我的项目相关的问题。这是我想做的总结:
我每天有多个文件要处理(每个 2Go),其中包含以下提取(无标题):
"id":"abcdefg","key1":"key2":"audiences":"aud1":1599033396,"aud2":1599030775,"segments":"seg1":1599033245,"seg2":1599030764,"seg3":1599030764,"seg4":1599030188
我想使用 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(键)和 之间的所有可能组合细分(键)(换句话说,每个受众中包含哪些细分)。
我想这样做是为了计算每个受众的每个细分中的 id 数。
这对于一些循环和 JSON 解析是完全可行的。但是,由于我需要快速处理此问题,因此我正在考虑使用 bigquery 来完成此任务。
我有一个将文件上传到 bq 表中的第一个脚本(每行都是一个字符串)并提取字段,但我不知道如何获得最终结果。
有什么办法吗?
感谢大家的帮助。
问候
【问题讨论】:
【参考方案1】:以下是 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
【讨论】:
以上是关于BigQuery 从 JSON 文件键中获取列的主要内容,如果未能解决你的问题,请参考以下文章
从 json 文件 bigquery 中提取 Json Array 元素