2017-08-24 85 views
0

使用下面的標準sql查詢,我可以返回包含a和b中所有字段的BigQuery中的結構表。如何在bigquery標準sql中使結構扁平化?

SELECT a, b 
FROM first_table a 
JOIN second_table b 
ON a.key = b.key; 

結果表架構將有a作爲記錄,作爲b紀錄,以a.field1,a.field2,b.field1,b.field2等所有有原來的類型。

如果我保存這個表作爲a_join_b然後查詢它legacy_sql:

SELECT * 
FROM a_join_b 
; 

將壓平的結構,並提供一個表名爲a_field1,a_field2,...,b_field1,b_field2領域。請注意表名稱和字段名稱之間的下劃線,並且a和b可以具有相似的字段名稱。

BigQuery標準SQL中有沒有一種方法可以在不引用單個記錄名的情況下展平表?我在How to convert a nested flatten into Standard SQL看過UNNEST,但該解決方案似乎需要連接必須命名的未命名字段。

回答

0

如果ab沒有陣列,這是非常簡單的:

SELECT * 
FROM first_table a 
JOIN second_table b 
USING (key) 

SELECT a.*, b.* EXCEPT (key) 
FROM first_table a 
JOIN second_table b 
ON a.key = b.key 

如果他們這樣做包含數組,那麼它依賴於那些佈局(UNNEST指只有陣列,所以我懷疑他們可能)。如果是這樣,你能澄清表的佈局嗎?

+0

謝謝,但這些查詢不會預先指定表名稱a和b。另外,如果a和b具有相同名稱的字段,則它們不起作用。錯誤:不支持結果中重複的列名稱。這些表不包含數組。考慮以下查詢:使用first_table AS( SELECT 777 AS key,1 AS x,2 AS y,3 AS z ), second_table AS( SELECT 777 AS key,4 AS x,5 AS Y,6爲Z ) SELECT * FROM AS first_table一個 JOIN second_table爲b 使用(鍵)''' – rmg

+0

什麼是你從這個例子要的結果? – Maximilian

+1

Mikhail Berlyant在他回覆「在BigQuery標準SQL中是否有預先加入表名的方法?」時提供了公認的解決方案?問題在堆棧中:https://stackoverflow.com/questions/45692560/is-there-a-way-to-prepend-joined-tablename-in-bigquery-standard-sql。 – George

0

Mikhail Berlyant在his reply中提供了公認的解決方案:「是否有一種方法可以在BigQuery標準SQL中預先加入表名?」問題在堆棧中。