2017-08-01 11 views
0

Google Big Queryにインポートするテーブルがあります。 これらの表は私のステージング表です。ビューを使用してステージング表を論理ウェアハウス表に変換しています。 私の問題はサロゲートキーです。Google BigクエリにFarm_fingerprintを使用する

現在、データが大きすぎるため、ROW_NUMBER()が失敗しています。

私はFARM_FINGERPRINT

ビッグクエリでSurrogate_key世代を採用する適切な方法がありますを使用することを推奨されていますか?説明を明確にするために、更新1。

ありがとう

私のソーステーブルの中には、数百万のレコードを持つ30のフィールドがあります。ここに表示するには大きな。後でBIツールを支援する代理キーを作成する必要があるため、これらのレコードをテーブルに変換しています。

この目的のために、私たちのビュー(ターゲットテーブルを置き換える)には変換があり、ROW_NUMBER()関数を使って独自の代理キーを作成していました。この関数はBig Queryにロジック全体を1つのノードにプッシュさせ、クエリをクラッシュさせることを認識しました。

代理キーとして使用するINT64値を取得するための入力として一意のビジネスキーを表す連結フィールドの文字列を使用してFARM_FINGERPRINT()を使用しています。これは、チームによって必要に応じてBIツールで使用できる整数を提供するということです。

大規模なデータセットがある場合、Google Big Queryで整数ベースのサロゲートキーを生成する適切な方法がありますか?

ありがとうございました。

+0

:今、各行はfirst_letter_author + row_numberで構成されるIDを持つことができます。今はあまりにも一般的です! –

+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` 

これは機能します。あなたはそれを答えることは(あなたのために、より良い)容易になり、より具体的な例を提供できるかどう

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に組み込むと、フィールドが整数から文字列に変換されることがわかりました。彼らのシステムでは、文字列の比較は不可能です。愛のアイデアtho。ありがとう! – arcee123

+1

同じ戦略が整数でも機能します。文字列を書くのではなく、HASH()などの数字を使って行のデータを分割し、 'ROW_NUMBER()OVER(PARTITION BY)' –

関連する問題