2017-01-23 2 views
0

私は、特定の列の値が複製された行を削除するbigqueryのDAYパーティションテーブルを持っています(私はそのような値を最後にタイムスタンプ列で並べ替えたい)。現在、bigquery DML言語はパーティション表をサポートしていないため(他の制限があります)、元のビューをフィルタリングして一時表を作成し、元の表を削除してからコピーを実行する必要があります。一時テーブルを元の名前に変更し、一時テーブルを削除します。分割されたテーブルをフィルタリングする

SELECT * EXCEPT(row_number) FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY partition_col order by time_col desc) row_number FROM my_partioned_table ) WHERE row_number = 1

しかし、どのように、私はこのアプローチにパーティション情報を保存しない:私はこのようなものでこれを行うことができますか?

完全なテーブルをコピーすると、分割情報は保持されますが、パーティショニングも保持するテーブルのフィルタ付きビューを効果的に作成するにはどうすればよいですか?

答えて

1

変更が複数のパーティションにまたがっている場合は、各パーティションごとに個別にクエリを実行する必要があります。

  1. 一時テーブルをパーティションとして作成します。
  2. 一度に1つのパーティション(_PARTITIONTIMEのフィルタを使用)のテーブルのフィルタ表示を返し、一時テーブルの右側のパーティションに追加するクエリを実行します。 (たとえば、20170115のパーティションで作業している場合、宛先テーブルは$ 20170115テーブルになります)
  3. 一時テーブルから最終結果テーブルにコピーすると、パーティション情報はテーブルコピーに保存されていることが予想されます。
関連する問題