大查询“SELECT * EXCEPT”
Posted
技术标签:
【中文标题】大查询“SELECT * EXCEPT”【英文标题】:Big query "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
地址应该包含除邮政编码以外的所有列。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于大查询“SELECT * EXCEPT”的主要内容,如果未能解决你的问题,请参考以下文章