Google Bigqueryのテーブルからデータの一部を削除するためのサポートを追加する計画を知っている人はいますか?現在私たちが抱えている問題は、時間の経過とともに収集するデータポイントの分析に使用していることです。過去X日間のデータに対してクエリを実行しますが、過去X日間のデータの後、BigQueryにデータを保存する必要はなくなりました。
現在データを削除するために考えられる唯一の方法は、データのテーブル全体を削除し、それを再作成してX日間のデータをロードすることです。ただし、これにはデータを毎日のCSVファイルに保存する必要がありますが、これは最適ではありません。
この問題を処理する方法に関する推奨事項、または近い将来に行削除クエリがある場合はどうですか?
2016年の更新:BigQueryは行を削除および更新できるようになりました-Fh
https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax
ユースケースを説明してくれてありがとう。 BigQueryは仕様により追加専用です。現在、単一の行または既存のデータセットからの行のバッチの削除はサポートされていません。
現在、「ローテーション」ログシステムを実装するには、次のいずれかを行う必要があります。1.毎日新しいテーブルを作成します(必要に応じて古いテーブルを削除します)。
実際には、毎日新しいテーブルを作成することをお勧めします。 BigQueryは照会されるデータの量に応じて課金されるため、毎回大規模なデータセット全体を照会するよりも、これが最も経済的です。
ところで、現在どのようにデータを収集していますか?
Bigクエリでレコードを削除するには、最初に標準SQLを有効にする必要があります。
標準SQLを有効にする手順
これにより、BigQueryデータ操作言語(DML)がBigQueryテーブルのデータを更新、挿入、削除できるようになります
これで、レコードを削除するプレーンSQLクエリを作成できます
DELETE [FROM] target_name [alias] WHERE condition
参照できます: https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax#delete_statement
また、該当する場合、BigQueryのOMIT RECORD IFを試して、削除するものを除くすべてのアイテムを返すことができます。次に、そのクエリ結果から新しいテーブルを作成します。
(Googleリファレンスドキュメントからの例)
SELECT * FROM
publicdata:samples.github_nested
OMIT RECORD IF
COUNT(payload.pages.page_name) <= 80;
これは、レガシーSQLを使用する場合にのみ関係します。
以下を試すことができます:
DELETE FROM {dataset}.{table} WHERE {constraint}