BigQueryの便利な機能 過去のテーブルの状態を参照する

2020年10月12日

日次の処理でテーブルが更新されるようなケースでは、障害が発生した際に過去のある時点のテーブルの状態(どのようなデータが入っていたかなど)を知りたいケースがあります。

BigQueryでは過去のある時点のテーブルの状態を参照することが可能です。

FOR SYSTEM_TIME AS OF を使います。

https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax?hl=ja#for-system_time-as-of

実際にやってみた

まず、テーブルを作成します。こちらのブログと同様にCSVからアップロードしました。

この時点では3つのレコードが入っていることが確認できます。

続いて、前回のブログと同様にレコードを追加します。

bananaが追加されていることが確認できます。

そうしたら、即座に以下のクエリを実行します。

SELECT * FROM `gps-test-241502.hoge.food` FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 MINUTE);

これは1分前のテーブルの状態を参照します。

そのため、追加したbananaは結果にはでません。banana追加後に1分以上経ってしまうとNGなので、できるだけ早く実行しました。

以下のように、bananaは結果にでませんでした。banana追加前の状態が参照されています。