web-dev-qa-db-ja.com

Google BigQueryは行を削除しますか?

Google Bigqueryのテーブルからデータの一部を削除するためのサポートを追加する計画を知っている人はいますか?現在私たちが抱えている問題は、時間の経過とともに収集するデータポイントの分析に使用していることです。過去X日間のデータに対してクエリを実行しますが、過去X日間のデータの後、BigQueryにデータを保存する必要はなくなりました。

現在データを削除するために考えられる唯一の方法は、データのテーブル全体を削除し、それを再作成してX日間のデータをロードすることです。ただし、これにはデータを毎日のCSVファイルに保存する必要がありますが、これは最適ではありません。

この問題を処理する方法に関する推奨事項、または近い将来に行削除クエリがある場合はどうですか?

20
Daum

2016年の更新:BigQueryは行を削除および更新できるようになりました-Fh

https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax


ユースケースを説明してくれてありがとう。 BigQueryは仕様により追加専用です。現在、単一の行または既存のデータセットからの行のバッチの削除はサポートされていません。

現在、「ローテーション」ログシステムを実装するには、次のいずれかを行う必要があります。1.毎日新しいテーブルを作成します(必要に応じて古いテーブルを削除します)。

実際には、毎日新しいテーブルを作成することをお勧めします。 BigQueryは照会されるデータの量に応じて課金されるため、毎回大規模なデータセット全体を照会するよりも、これが最も経済的です。

ところで、現在どのようにデータを収集していますか?

25

Bigクエリでレコードを削除するには、最初に標準SQLを有効にする必要があります。

標準SQLを有効にする手順

  1. BigQuery Web UIを開きます。
  2. [クエリの作成]をクリックします。
  3. [オプションを表示]をクリックします。
  4. [レガシー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

20
rahulb

また、該当する場合、BigQueryのOMIT RECORD IFを試して、削除するものを除くすべてのアイテムを返すことができます。次に、そのクエリ結果から新しいテーブルを作成します。

(Googleリファレンスドキュメントからの例)

SELECT * FROM
  publicdata:samples.github_nested

OMIT RECORD IF
  COUNT(payload.pages.page_name) <= 80;

出典: https://cloud.google.com/bigquery/query-reference

2

これは、レガシーSQLを使用する場合にのみ関係します。

以下を試すことができます:

DELETE FROM {dataset}.{table} WHERE {constraint}
1
brettster