GCP

【BigQuery】UPDATE or DELETE statement over table fangrowth.test.fan_requests would affect rows in the streaming buffer, which is not supported. の対処法

概要

BigQueryは、大規模なデータセットの分析に使用されるクラウドベースのデータウェアハウスです。

ストリーミングデータの処理に優れており、ストリーミングインサート機能を提供しています。

しかし、このストリーミングインサート機能には、UPDATEまたはDELETEステートメントを実行する際に生じる問題があります。

結論

およそ数秒〜数十分ほどの間、UPDATEまたはDELETEステートメントを実行することができません

理由はストリーミングインサート機能では、すぐにテーブルにデータが書き込まれるわけではないからです。

まずストリーミングバッファに保留されて、その後データがテーブルに永続的に書き込まれます。

ストリーミングバッファに保留されている間は、データの変更と削除ができません

UPDATEまたはDELETEステートメントがストリーミングバッファに存在するデータに影響を与えることができないため、

エラーメッセージが発生します。

解決策

この問題を解決するには、以下の2つの方法があります。

データがテーブルに書き込まれるのを待つ

純粋にデータが書き込まれるのを待ちましょう。

安全にデータを管理するためにストリーミングバッファ機能を選択したのであれば、待つのが最善です。

ストリーミングバッファを無効する

ストリーミングバッファは無効にすることができます。

ストリーミングバッファを無効にすることで、ストリーミングインサートされたデータは直ちにテーブルに書き込まれ、

UPDATEまたはDELETEステートメントを実行することができます。

ストリーミングバッファを無効にする手順は以下の通りです。

  1. BigQueryコンソールで、対象のテーブルを選択します。
  2. 「編集」をクリックして、テーブルの設定画面を開きます。
  3. 「設定」タブを選択し、「ストリーム設定」セクションに移動します。
  4. 「バッファリングの設定」をクリックします。
  5. 「バッファリングを有効にする」チェックボックスをオフにします。
  1. 「変更を保存」をクリックして設定を保存します。

以上の手順で、ストリーミングバッファを無効にすることができます。

無効化のデメリット

ストリーミングバッファを無効にすることにより、エラーは解消されます。

ただ、これによりストリーミングインサートのパフォーマンスが低下する可能性があるため、慎重に検討する必要があります。

また、ストリーミングバッファを無効にする場合は、

ストリーミングインサートのデータがすぐにテーブルに書き込まれるため、クエリのパフォーマンスが低下する可能性があります。

これを防ぐために、ストリーミングバッファを有効にしたまま、ストリーミングインサートを定期的にバッチ処理することもできます。

ストリーミングバッファの影響を受けることなく、データをテーブルに挿入することができます。

まとめ

BigQueryのストリーミングインサート機能を使用してデータを挿入する際に、

UPDATEまたはDELETEステートメントを実行する際に生じる問題を解決するためには、

ストリーミングバッファに保留されているデータがデータベースに書き込まれるのを待つか、

ストリーミングバッファを無効にする方法があります。

ただし、ストリーミングバッファを無効にすると、ストリーミングインサートのパフォーマンスが低下する可能性があるため、

リスクを踏まえて慎重に検討しましょう。

-GCP