1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

新機能紹介:BigQuery の CHANGES 関数でデータ変更履歴を効率的に追跡!

Posted at

こんにちは。codepoet です。

はじめに

プレビュー機能として「CHANGES関数」が追加されました。この関数を使うことで、特定のテーブルのデータ変更履歴をSQLクエリで簡単に取得できるようになります。

従来、データ変更履歴の追跡は、トリガーや外部システムを用いた複雑な仕組みが必要でしたが、CHANGES関数を使えば、SQLクエリだけで実現できるため、開発効率が大幅に向上します。

本記事では、CHANGES関数の概要、使い方を解説していきます。

目次

  1. CHANGES関数とは?
  2. CHANGES関数の使い方
  3. まとめ
  4. 参考文献

CHANGES関数とは?

CHANGES関数は、指定したテーブルの、特定の期間におけるデータの変更履歴を返すテーブル関数です。返されるテーブルには、変更前のデータと変更後のデータ、変更日時などが含まれます。

主な特徴

  • シンプルなSQL: SQLクエリだけで変更履歴を取得できるため、複雑なコードを書く必要がありません。
  • 柔軟な期間指定: 任意の期間の変更履歴を指定できます。
  • 変更内容の特定: 変更されたカラムや、変更前の値と変更後の値を特定できます。

CHANGES関数の使い方

CHANGES関数の基本的な使い方は以下の通りです。

CHANGES(
  TABLE table,
  start_timestamp DEFAULT NULL,
  end_timestamp)

シンプルですね。

  • table_name: 変更履歴を取得したいテーブルの名前を指定します。
  • start_timestamp: (省略可) 変更履歴を取得する開始時刻を指定します。NULL を指定すると、テーブル作成以降のすべての変更が取得されます。
  • end_timestamp: 必須。変更履歴を取得する終了時刻を指定します。現在の時刻から10分以上前 の値を設定する必要があります。最大で1日間の範囲を指定できます。

CHANGES関数の例

Produce というテーブルに対して変更を行い、CHANGES関数で取得される変更履歴を出力します。

-- テーブルの作成
CREATE TABLE mydataset.Produce (
  product STRING,
  inventory INT64
)
OPTIONS(enable_change_history=true);

-- 2行のデータを挿入
INSERT INTO mydataset.Produce
VALUES
  ('bananas', 20),
  ('carrots', 30);

-- 1行のデータを更新
UPDATE mydataset.Produce
SET inventory = inventory - 10
WHERE product = 'carrots';

-- 1行のデータを削除
DELETE FROM mydataset.Produce
WHERE product = 'bananas';

-- 10分待ってから、すべての変更履歴を取得
SELECT
  product,
  inventory,
  _CHANGE_TYPE AS change_type,
  _CHANGE_TIMESTAMP AS change_time
FROM
  CHANGES(TABLE mydataset.Produce, NULL, TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 601 SECOND))
ORDER BY change_time, product;

出力結果:

Screenshot 2024-07-25 15.45.18.png

ポイント:

  • テーブルの変更履歴を取得するには、enable_change_history オプションTRUE に設定する必要があります。このオプションを有効にすると、課金が発生する可能性があるので注意してください。(料金の詳細については、BigQueryのドキュメントを参照してください)
  • 取得できる変更履歴は、テーブルの時系列制限期間に依存します。

利用シーン

  • データ監査: データの変更履歴を監査し、不正な変更や誤操作がないか確認する。
  • データ復元: データが誤って削除された場合、変更履歴からデータを復元する。
  • データ分析: データの変更パターンを分析し、意思決定に役立てる。
  • デバッグ: アプリケーションの不具合の原因を特定するために、変更履歴を調べることで、問題発生時の状況を把握する。

まとめ

CHANGES関数は、データの変更履歴を詳細に追跡できる機能です。
ただし、CHANGES関数の利用には、パフォーマンス、コスト、データの保持期間など、いくつかの注意点もありますので、ユースケースに合わせて、CHANGES関数を活用してみてください。

参考文献

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?