2017-08-01 47 views
0

我有導入到Google Big Query中的表格。 這些表是我的登臺表,我使用視圖將登臺錶轉換爲邏輯倉庫表。 我的問題是代理鍵。對谷歌Big Query使用Farm_fingerprint

現在,ROW_NUMBER()失敗,因爲我的數據太大。

我一直推薦使用FARM_FINGERPRINT

是否有聘請Surrogate_key代在大查詢正確的方法是什麼?

謝謝

更新1的澄清。

我的一些源表中有30個記錄數百萬個字段。要在這裏顯示大。我們正在將這些記錄轉換成需要創建代理鍵以便稍後幫助BI工具的表格。

爲此,我們的視圖(用來替換目標表)有了轉換,再加上我們使用ROW_NUMBER()函數來創建獨特的代理鍵。我們意識到該函數會強制Big Query將整個邏輯推送到一個節點上,從而導致查詢崩潰。

我們玩弄FARM_FINGERPRINT(),使用表示唯一業務鍵的串聯字段串作爲輸入來檢索INT64值以用作代理鍵。我們的信念是,這將提供一個整數,我們可以在該工具所需的BI工具中使用該整數。

我在問的是,當你有這麼大的數據集時,是否有合適的方法在Google Big Query中生成基於整數的代理鍵?

謝謝。

+0

如果你能提供更具體的例子將是(對你更好)比較容易回答。現在它太通用了! –

+0

澄清 - 是否打算在桌旁放一列專用的密鑰?你的桌子的模式是什麼? –

回答

1

你可以找到一種不同的策略來分割你的數據嗎?

這種失敗,「資源超出」(如預期 - 請注意,我沒有試圖去複製它們,但每個編號他們提到):

SELECT author 
    , ROW_NUMBER() OVER(ORDER BY created_utc) 
FROM `fh-bigquery.reddit_comments.2017_06` 

但我可以分割我的作家由第一個字母組成,以使數據適合分區:

SELECT author 
    , ROW_NUMBER() OVER(PARTITION BY REGEXP_EXTRACT(author, '.') ORDER BY created_utc) 
FROM `fh-bigquery.reddit_comments.2017_06` 

This Works!現在,每行可以有first_letter_author + row_number組成的ID:

SELECT * 
    , CONCAT(
     first_letter 
     , '-' 
     , CAST(ROW_NUMBER() 
     OVER(PARTITION BY REGEXP_EXTRACT(author, '.') 
     ORDER BY created_utc) AS STRING)) id 
FROM (
    SELECT author, created_utc, REGEXP_EXTRACT(author, r'^.') first_letter 
    FROM `fh-bigquery.reddit_comments.2017_06` 
) 
+0

嗨菲利普....非常感謝你的想法。我們拋棄了這一點,商業智能運營商告訴我們,在SK中包含字母會將字段從整數轉換爲字符串。在他們的系統中,字符串比較是不行的。喜歡這個主意。謝謝! – arcee123

+1

相同的策略將使用整數。不使用字符串,使用HASH()或任何數字可幫助您將數據分割成行,然後您可以使用ROW_NUMBER()OVER(PARTITION BY) –