2016-09-27 70 views
4

日付分割BigQueryテーブルの最新のパーティションからデータを選択しようとしていますが、クエリは引き続きテーブル全体からデータを読み込みます。BigQueryテーブルで最新パーティションを選択するにはどうすればよいですか?

私は(私の知る限り、BigQueryにはQUALIFYをサポートしていない)試した:

SELECT col FROM table WHERE _PARTITIONTIME = (
    SELECT pt FROM (
    SELECT pt, RANK() OVER(ORDER by pt DESC) as rnk FROM (
     SELECT _PARTITIONTIME AS pt FROM table GROUP BY 1) 
    ) 
) 
    WHERE rnk = 1 
); 

しかし、これは動作し、すべての行を読み取っていません。

SELECT col from table WHERE _PARTITIONTIME = TIMESTAMP('YYYY-MM-DD') 

ここで、'YYYY-MM-DD'は特定の日付です。

ただし、今後このスクリプトを実行する必要がありますが、テーブルの更新(および_PARTITIONTIME)は不規則です。 BigQueryの最新パーティションからのみデータを取得できる方法はありますか?

+0

あなたは明確にすることができます - それは動作しませんか?何が問題なの? –

+0

私は以下のようにコメントしましたが、両方のクエリは最新のパーティションからのみ読み取るわけではありません。最後の_partitiontimeを明示的に入力すると、クエリは18 MBを読み込みます。しかし、以下の2つの質問のいずれかを試してみると、15.4 GBと表示されます。 – cshin9

+1

私は今それを得た。更新していただきありがとうございます!理由を理解するのが面白い。 @ felipe-hoffaはキャッシュについて何か言及しましたが、これは明確ではありませんでした。 –

答えて

2

はと

SELECT * FROM [dataset.partitioned_table] 
WHERE _PARTITIONTIME IN (
    SELECT MAX(TIMESTAMP(partition_id)) 
    FROM [dataset.partitioned_table$__PARTITIONS_SUMMARY__] 
) 

または

SELECT * FROM [dataset.partitioned_table] 
WHERE _PARTITIONTIME IN (
    SELECT MAX(_PARTITIONTIME) 
    FROM [dataset.partitioned_table] 
) 
+2

これにより、クエリ結果のキャッシュが停止することに注意してください(コストに影響する可能性があります)。 –

+2

どちらのクエリも、目的のパーティションではなくすべての行を読み取ります。 – cshin9

関連する問題