我想要做的应该是简单的:给定一个BigQuery架构,我想要选择除少数几个之外的所有表(包括嵌套的表)。棘手的是BigQuery有一个嵌套结构,我要排除的几个嵌套在其他记录中。
我在BigQuery documentation中找到了SELECT * except子句,看起来很有希望。问题是它似乎不支持嵌套结构排除。
例如,使用public github_nested数据集,我们可以编写像
这样的查询#standardSQL
SELECT * except (payload) FROM `bigquery-public-data.samples.github_nested` LIMIT 1000
通过从结果中删除有效负载记录,这可以成功实现我们的目标。现在让我们想象一下,我们只想删除payload.comment,从而保留响应中剩余的有效负载记录内容。我试过了
#standardSQL
SELECT * except (payload.comment) FROM `bigquery-public-data.samples.github_nested` LIMIT 1000
然而,这失败了。
有人知道如何实现这个目标吗?
谢谢!
答案 0 :(得分:7)
考虑问题的方法是,您仍然希望结果中包含payload
列,但您希望它具有不同的结构,即排除comment
。在这种情况下,您可以使用SELECT * REPLACE
进行修改。例如,
#standardSQL
SELECT * REPLACE ((SELECT AS STRUCT payload.* EXCEPT (comment)) AS payload)
FROM `bigquery-public-data.samples.github_nested`
LIMIT 1000;
答案 1 :(得分:0)
这也可行:
#standardSQL
SELECT
*
EXCEPT (payload),
payload.desc AS payload_desc,
payload.action AS payload_action
FROM `bigquery-public-data.samples.github_nested`