2016-12-07 85 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