2016-04-29 12 views
1

Google BigQueryでは、1億2,000万行のテーブルを複数の等しいサイズのテーブルに分割したいと考えています。テーブルの行番号を取得するかどうか尋ねる質問には、answerが見つかりました。例のソリューションでした:あなたがROW_NUMBERを取得できるようになり、その後、手動でこれが例のテーブルのために働くBigQueryでテーブルを複数のテーブルに分割するSQL

WHERE row_number BETWEEN x AND y 

を選択するが、ROW_NUMBER()を使用してテーブルを作成することができ

SELECT 
    ROW_NUMBER() OVER() row_number, 
    contributor_username, 
FROM (
    SELECT contributor_username, 
    FROM [publicdata:samples.wikipedia] 
    GROUP BY contributor_username 
) 

117MM行の表のリソース超過エラーが発生します。

私は、次のアイデアを試みた:私は、[1、...、100] NTILE =のためにこれを実行する必要があります

SELECT field1, field2 
    FROM (
     SELECT field1, field2, ntile(100) over (order by row_id) as ntile 
     FROM (
     SELECT hash(some_unique_key) as row_id, field1, field2 
     FROM table_with_177_MM_rows 
    ) 
) 
    WHERE ntile = 1 

を。これも失敗しました。 GBQの一意のキーを持つ大きなテーブルを小さなテーブルに分割する方法はありますか?私の第二の例と同様に

答えて

1

は上記と同じですがNTILE窓関数を使用せず:

SELECT field1, field2 
    FROM (
     SELECT hash(some_unique_key) as row_id, field1, field2 
     FROM table_with_177_MM_rows 
) 
    WHERE abs(row_id) % {n_tables} = {table_id} 

n_tables = 10ためには、各テーブルを取得するために​​のために実行します。多分もっと良い方法がありますか?

2

あなたはrnd

SELECT 
    field1, field2, 
    RAND() AS rnd 
FROM YourBigTable 

余分なフィールドを持つ新しいテーブル(TEMP_TABLE)を作成I、500万行と同様に30億行を持つテーブルの上にテーブルの上に以下しようと、期待どおりに

最初に働きました以下のようなものを実行するよりも、分割するテーブルの数に応じて、必要な回数だけ実行してください。当然の

SELECT 
    field1, field2 
FROM temp_table 
WHERE rnd >= 0.3 AND rnd < 0.4 

あなたは先のテーブルを設定することを確認する必要があり、それぞれ

すべてはそれはしかし、より良い方法であるかどうかを言うのは難しい

をした後、あなたはTEMP_TABLE削除します。あなた次第!

0

上記と似ていますが、すべて1つのクエリで(これらの種類のクエリは内部エラーで失敗することがあり、再実行する必要があります。別の質問です)。以下のクエリは、コードを介して生成する方が簡単です。

SELECT field1, field2 FROM ( SELECT field1, field2 FROM table_with_177_MM_rows WHERE hash(some_unique_key) % {n_tables} = {table_id_1} ), ( SELECT field1, field2 FROM table_with_177_MM_rows WHERE hash(some_unique_key) % {n_tables} = {table_id_2} ), .... ( SELECT field1, field2 FROM table_with_177_MM_rows WHERE hash(some_unique_key) % {n_tables} = {table_id_n} ),

+0

あなたは複数のtables'は、1つのquery'内のすべての '上記により作成されるか、'明確にしてくださいことができます。 '複数のテーブル'が問題の鍵でした! –

関連する問題