BigQuery select *除了嵌套列

时间:2016-12-07 14:17:10

标签: sql google-bigquery

我想要做的应该是简单的:给定一个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

然而,这失败了。

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

谢谢!

2 个答案:

答案 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`