BigQuery select*除了嵌套列

Spi*_*key 7 sql google-bigquery

我想做的应该是简单的:给定一个BigQuery架构,我想要选择除少数几个之外的所有表(包括嵌套的表).棘手的是BigQuery有一个嵌套结构,我要排除的几个嵌套在其他记录中.

我在BigQuery文档中找到了SELECT*except子句,看起来很有希望.问题是它似乎不支持嵌套结构排除.

例如,使用public github_nested数据集,我们可以编写类似的查询

#standardSQL
SELECT * except (payload) FROM `bigquery-public-data.samples.github_nested` LIMIT 1000
Run Code Online (Sandbox Code Playgroud)

通过从结果中删除有效负载记录,这可以成功实现我们的期望.现在让我们想象一下,我们只想删除payload.comment,从而保留响应中剩余的有效负载记录内容.我试过了

#standardSQL
SELECT * except (payload.comment) FROM `bigquery-public-data.samples.github_nested` LIMIT 1000
Run Code Online (Sandbox Code Playgroud)

但是,这失败了.

有人知道如何实现这一目标吗?

谢谢!

Ell*_*ard 8

想到这个问题的方法是你仍然想payload在结果中有一个列,但是你希望它有一个不同的结构,即排除comment.在这种情况下,您可以使用SELECT * REPLACE进行修改.例如,

#standardSQL
SELECT * REPLACE ((SELECT AS STRUCT payload.* EXCEPT (comment)) AS payload)
FROM `bigquery-public-data.samples.github_nested`
LIMIT 1000;
Run Code Online (Sandbox Code Playgroud)