2016-12-07 66 views
2

我想要做的事情应该很简单:给定一个BigQuery模式,我想选择除少数几个之外的所有表(包括嵌套的表)。棘手的是BigQuery有一个嵌套结构,我想排除的少数嵌套在其他记录中。BigQuery select *除了嵌套列

我发现BigQuery documentation中的SELECT * except子句似乎很有希望。问题是它似乎不支持嵌套结构排除。

例如,使用公共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

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

#standardSQL 
SELECT * REPLACE ((SELECT AS STRUCT payload.* EXCEPT (comment)) AS payload) 
FROM `bigquery-public-data.samples.github_nested` 
LIMIT 1000; 
+0

谢谢你,艾略特。这确实解决了我上面概述的问题。不幸的是,我一直是一个可怕的问题海报,并意识到我的情况有点复杂,重复的领域(这不是例子)。我会添加一个更新的问题。再次,道歉! – Spikey

+0

如果这回答了原始问题,您是否将其标记为已接受?随意发布与重复字段有关的问题的另一个变体。谢谢! –

+0

如果这是在stackoverflow上使用的约定,当然。感谢您的帮助! – Spikey