【问题标题】:Bigquery: Query repeated key-value to into single rowBigquery:将重复的键值查询到单行
【发布时间】:2021-07-02 19:55:03
【问题描述】:

我有一个类似于下面的模式,其中我用键值对象重复了字段:

metadata.date               STRING  NULLABLE    
metadata.properties         RECORD  REPEATED    
metadata.properties.key     STRING  NULLABLE    
metadata.properties.value   STRING  NULLABLE    

我有行喜欢 {日期:“01-02”,属性:[{键:“foo”,值:“bar”},{键:“bar”,值:“baz”},...]

我想将重复字段中的所有内容作为单行的列进行查询。请注意,properties 重复字段中有 100 多个条目。有没有办法在没有 100 多个子查询的情况下实现这一目标? 我目前的查询是:

SELECT
    date,
    (SELECT value FROM unnest(metadata.properties) WHERE key='foo') as foo,
    (SELECT value FROM unnest(metadata.properties) WHERE key='bar') as bar,
    ...
FROM mytable

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    考虑下面 - 动态提取所有键并构建由execute immediate 执行的所需查询

    execute immediate (select '''select * except(row_id)
    from (
      select to_json_string(t) row_id, metadata.date, key, value
      from `project.dataset.table` t, unnest(metadata.properties) property
    )
    pivot (max(value) for key in (''' || string_agg(distinct '"' || key || '"' order by '"' || key || '"') || '''))'''
    from `project.dataset.table`, unnest(metadata.properties)
    )
    

    注意:您很可能可以排除/删除 to_json_string(t) row_id 和 except(row_id) 的使用,但我将其包含在此处是因为我不知道其余 scheam 的所有详细信息,并且我想确保行是按原样保存,不会意外分组

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-25
      • 1970-01-01
      • 2016-07-17
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      相关资源
      最近更新 更多