2017-10-06 100 views
0

我正在學習BigQuery標準SQL。BigQuery文檔 - 爲什麼拼合去除重複

我已經遵循瞭如何將數據與舊版SQL,herehere平鋪的示例。

平滑數據生成具有相似行的堆疊數據很有意義。

但是,在描述從傳統SQL移動到標準SQL的文檔中,它描述瞭如何執行相同的展平操作。這個子標題被稱爲Removing Repitition with Flatten

有人可以向我解釋嗎?看起來flatten通過將嵌套數據轉換爲堆疊數據來生成重複數據,而且我覺得我並不理解基本的東西。

回答

1

被刪除的「重複」是一些特定的列。假設你有數據,看起來像這樣,在xyINT64型和zARRAY<INT64>

x y z 
----------------- 
1 2 [3, 4, 5] 
6 7 [8, 9] 

在這種情況下平滑手段去除z重複,使你最終只INT64列類型輸出沒有ARRAY類型,將數據轉換成以下形狀:

x y z 
--------- 
1 2 3 
1 2 4 
1 2 5 
6 7 8 
6 7 9 

注意,我們實際上加入重複,因爲xy的值在行之間被重複,但是我們已經平坦化了z的重複結構。在查詢表單中,您可以嘗試以下示例。這第一個簡單的顯示數據的初始形狀:

WITH Input AS (
    SELECT 1 AS x, 2 AS y, [3, 4, 5] AS z UNION ALL 
    SELECT 6, 7, [8, 9] 
) 
SELECT x, y, z 
FROM Input; 

這個例子顯示了「扁平化」 z後的數據:

WITH Input AS (
    SELECT 1 AS x, 2 AS y, [3, 4, 5] AS z UNION ALL 
    SELECT 6, 7, [8, 9] 
) 
SELECT x, y, z 
FROM Input AS t, 
    t.z AS z; 
+0

非常感謝埃利奧特,這是一個非常好的解釋。 –