GCP Consoleで作成され、GCP BigQuery Node.jsテーブル挿入関数で更新されたテーブルからレコードを削除しようとすると、次のエラーが発生します。
_UPDATE or DELETE DML statements are not supported over table stackdriver-360-150317:my_dataset.users with streaming buffer
_
テーブルは、ストリーミング機能なしで作成されました。そして、私がドキュメントで読んでいるものから Tables that have been written to recently via BigQuery Streaming (tabledata.insertall) cannot be modified using UPDATE or DELETE statements
。
この関数を使用してレコードがテーブルに挿入されると、レコードを削除する方法がないということですか?まったく?その場合、テーブルを削除して最初から再作成する必要があるということですか?そうでない場合。この問題を回避するための回避策を提案できますか?
ありがとう!
テーブルにストリーミングバッファがあるかどうかを確認するには、tables.get
streamingBuffer
という名前のセクションの応答、またはパーティションテーブルにストリーミングする場合、ストリーミングバッファ内のデータには_PARTITIONTIME
疑似列。したがって、単純なWHEREクエリでもチェックできます。
ストリーミングデータ は、テーブルへの最初のストリーミング挿入から数秒以内にリアルタイム分析に使用できますが、コピー/エクスポートおよびその他の操作に使用できるようになるまで最大90分かかる場合があります。すべてのバッファーがクラスターに保持されるように、おそらく最大90分待機する必要があります。クエリを使用して、ストリーミングバッファが空かどうかを確認できます。
ロードジョブを使用してテーブルを作成する場合、ストリーミングバッファーはありませんが、おそらくいくつかの値をストリームしました。
フィルターを変更して、現在のストリーミングバッファーに含まれる可能性のあるデータが含まれないようにしてください。
たとえば、このテーブルにストリーミングしているときにこのクエリは失敗します。
DELETE FROM `project.dataset.table`
WHERE id LIKE '%-%'
Error: UPDATE or DELETE statement over table project.dataset.table would affect rows in the streaming buffer, which is not supported
古いレコードを削除するだけで修正できます:
DELETE FROM `project.dataset.table`
WHERE id LIKE '%-%'
AND ts < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 40 MINUTE)
4282 rows affected.