CHANGES
CHANGES 句を使用すると、定義した時間区間内におけるテーブルの変更追跡メタデータをクエリできます。時間区間は、データ保持期間(デフォルトは 24 時間)内に収まっている必要があります。時間区間を定義するには、AT キーワードを使用して区間の開始時点となる時刻を指定します。区間の終了時点には、デフォルトで現在時刻が適用されます。過去の時刻を区間の終了時点として指定する場合は、AT キーワードとあわせて END キーワードを使用して区間を設定します。
構文
SELECT ...
FROM ...
CHANGES ( INFORMATION => { DEFAULT | APPEND_ONLY } )
AT ( { TIMESTAMP => <timestamp> |
OFFSET => <time_interval> |
SNAPSHOT => '<snapshot_id>' |
STREAM => <stream_name> } )
[ END ( { TIMESTAMP => <timestamp> |
OFFSET => <time_interval> |
SNAPSHOT => '<snapshot_id>' } ) ]
変更追跡の有効化
CHANGES 句を使用するには、テーブルで Fuse エンジンオプション change_tracking を true に設定しておく必要があります。change_tracking オプションの詳細については、Fuse Engine オプション を参照してください。
-- Enable change tracking for table 't'
ALTER TABLE t SET OPTIONS(change_tracking = true);
例
この例では、CHANGES 句を使用して、テーブルに対して行われた変更を追跡およびクエリする方法を示します。
ユーザープロファイル情報を保存するテーブルを作成し、変更追跡を有効にします。
CREATE TABLE user_profiles ( user_id INT, username VARCHAR(255), bio TEXT ) change_tracking = true; INSERT INTO user_profiles VALUES (1, 'john_doe', 'Software Engineer'); INSERT INTO user_profiles VALUES (2, 'jane_smith', 'Marketing Specialist');プロファイル更新をキャプチャするストリームを作成し、既存のプロファイルを更新して新しいプロファイルを挿入します。
CREATE STREAM profile_updates ON TABLE user_profiles APPEND_ONLY = TRUE; UPDATE user_profiles SET bio = 'Data Scientist' WHERE user_id = 1; INSERT INTO user_profiles VALUES (3, 'alex_wong', 'Data Analyst');ストリームによってユーザープロファイルの変更をクエリします。
-- Return all changes in user profiles captured in the stream SELECT * FROM user_profiles CHANGES (INFORMATION => DEFAULT) AT (STREAM => profile_updates); ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ user_id │ username │ bio │ change$action │ change$row_id │ change$is_update │ ├─────────────────┼──────────────────┼───────────────────┼──────────────────┼────────────────────────────────────────┼──────────────────┤ │ 1 │ john_doe │ Data Scientist │ INSERT │ 69cffb02264144c384d56f7b6cedee41000000 │ true │ │ 3 │ alex_wong │ Data Analyst │ INSERT │ 59f315c8655c49eab35ba1959e269430000000 │ false │ │ 1 │ john_doe │ Software Engineer │ DELETE │ 69cffb02264144c384d56f7b6cedee41000000 │ true │ └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ -- Return appended rows in user profiles captured in the stream SELECT * FROM user_profiles CHANGES (INFORMATION => APPEND_ONLY) AT (STREAM => profile_updates); ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ user_id │ username │ bio │ change$action │ change$is_update │ change$row_id │ ├─────────────────┼──────────────────┼──────────────────┼───────────────┼──────────────────┼────────────────────────────────────────┤ │ 3 │ alex_wong │ Data Analyst │ INSERT │ false │ 59f315c8655c49eab35ba1959e269430000000 │ └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ATキーワードとENDキーワードの両方を使用して、スナップショットとタイムスタンプの間の変更をクエリします。
-- Step 6: Take a snapshot of the user profile data.
SELECT snapshot_id, timestamp
FROM FUSE_SNAPSHOT('default', 'user_profiles');
┌───────────────────────────────────────────────────────────────┐
│ snapshot_id │ timestamp │
├──────────────────────────────────┼────────────────────────────┤
│ 6a11c94433714970895edd38577ac8b0 │ 2024-04-10 02:51:39.422832 │
│ 53dc4750af92423da91c50dcee547cfb │ 2024-04-10 02:51:39.399568 │
│ 910af7424f764891b0c6fa60aa99fc3a │ 2024-04-10 02:50:14.522416 │
│ 1225000916f44819a0d23178b2d0d1af │ 2024-04-10 02:50:14.500417 │
└───────────────────────────────────────────────────────────────┘
SELECT *
FROM user_profiles
CHANGES (INFORMATION => DEFAULT)
AT (SNAPSHOT => '1225000916f44819a0d23178b2d0d1af')
END (TIMESTAMP => '2024-04-10 02:51:39.399568'::TIMESTAMP);
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ user_id │ username │ bio │ change$action │ change$row_id │ change$is_update │
├─────────────────┼──────────────────┼──────────────────────┼──────────────────┼────────────────────────────────────────┼──────────────────┤
│ 1 │ john_doe │ Data Scientist │ INSERT │ 69cffb02264144c384d56f7b6cedee41000000 │ true │
│ 1 │ john_doe │ Software Engineer │ DELETE │ 69cffb02264144c384d56f7b6cedee41000000 │ true │
│ 2 │ jane_smith │ Marketing Specialist │ INSERT │ 3db484ac18174223851dc9de22f6bfec000000 │ false │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
