【问题标题】:BigQuery get columns from JSON file keysBigQuery 从 JSON 文件键中获取列
【发布时间】:2023-04-10 16:18:01
【问题描述】:

我面临一个与我的项目相关的问题。这是我想做的总结:

我每天有多个文件要处理(每个 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 表中的第一个脚本(每行都是一个字符串)并提取字段,但我不知道如何获得最终结果。

有什么办法吗?

感谢大家的帮助。

问候

【问题讨论】:

    标签: json google-bigquery


    【解决方案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     
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多