【问题标题】:Big query "SELECT * EXCEPT"大查询“SELECT * EXCEPT”
【发布时间】:2021-08-16 20:07:45
【问题描述】:

我正在学习如何查询 bigquery(尤其是 STRUCT 和 ARRAY)

我有一个表结构如下参考表: 表名:地址 姓名(字符串)、年龄(INT、地址(记录和重复) Address 中的列是:address1、address2、city、zipcode

问题: 如何选择除邮政编码以外的所有列

我尝试如下查询

  SELECT 
  EXCEPT(zipcode)
  FROM Address, UNNEST(address) 

上述查询是两次检索地址记录字段列。

另外,后续运行的select命令如下

SELECT 
Name, 
Age, 
Address
from temp

地址应该包含除邮政编码以外的所有列。

【问题讨论】:

    标签: google-cloud-platform google-bigquery


    【解决方案1】:

    如果你爆炸你的地址数组,你需要重建它。我不是 SQL 专家,但这段代码可以工作

    select name, 
    age, 
    ARRAY_AGG(STRUCT(a.address1 as address1, a.address2 as address2, a.city as city)) as address 
    from Address, unnest(address) a 
    group by name, age
    

    你不能使用* except,因为你需要按你的键分组来重建你的数组 agg

    【讨论】:

      【解决方案2】:

      考虑下面 - 保留所有列,除了 address 被删除,其中 zipcode 被删除

      select * except(address), 
        array(select as struct * except(zipcode) from t.address) address
      from Addresses t
      

      【讨论】:

        猜你喜欢
        • 2016-11-01
        • 2012-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多