AT
AT 句を使用すると、スナップショット ID、タイムスタンプ、ストリーム名、または時間間隔を指定して、データの以前のバージョンを取得できます。
TiDB Cloud Lake はデータ更新が発生すると自動的にスナップショットを作成するため、スナップショットは過去のある時点におけるデータのビューと見なせます。スナップショットには、スナップショット ID またはスナップショットが作成されたタイムスタンプを使ってアクセスできます。スナップショット ID とタイムスタンプの取得方法については、スナップショット ID とタイムスタンプの取得を参照してください。
これは TiDB Cloud Lake の Time Travel 機能の一部であり、保持期間内(デフォルトでは 24 時間)であれば、データの以前のバージョンに対してクエリ、バックアップ、リストアを実行できます。
構文
SELECT ...
FROM ...
AT (
SNAPSHOT => '<snapshot_id>' |
TIMESTAMP => <timestamp> |
STREAM => <stream_name> |
OFFSET => <time_interval>
)
スナップショット ID とタイムスタンプの取得
テーブルのすべてのスナップショットのスナップショット ID とタイムスタンプを返すには、FUSE_SNAPSHOT 関数を使用します。
SELECT snapshot_id,
timestamp
FROM FUSE_SNAPSHOT('<database_name>', '<table_name>');
例
この例では、AT 句を使用して、スナップショット ID、タイムスタンプ、ストリームに基づいて以前のデータバージョンを取得する方法を示します。
aという 1 つのカラムを持つtという名前のテーブルを作成し、値 1 と 2 の 2 行をテーブルに挿入します。CREATE TABLE t(a INT); INSERT INTO t VALUES(1); INSERT INTO t VALUES(2);テーブル
tに対してsという名前のストリームを作成し、テーブルに値 3 の行をさらに 1 行追加します。CREATE STREAM s ON TABLE t; INSERT INTO t VALUES(3);Time Travel クエリを実行して、以前のデータバージョンを取得します。
-- Return snapshot IDs and corresponding timestamps for table 't'
SELECT snapshot_id, timestamp FROM FUSE_SNAPSHOT('default', 't');
┌───────────────────────────────────────────────────────────────┐
│ snapshot_id │ timestamp │
├──────────────────────────────────┼────────────────────────────┤
│ 296349da841d4fa8820bbf8e228d75f3 │ 2024-04-02 15:25:21.456574 │
│ aaa4857c5935401790db2c9f0f2818be │ 2024-04-02 15:19:02.484304 │
│ e66ad2bc3f21416e87903dc9cd0388a3 │ 2024-04-02 15:18:40.766361 │
└───────────────────────────────────────────────────────────────┘
-- These queries retrieve the same data but using different methods:
-- by snapshot_id:
SELECT * FROM t AT (SNAPSHOT => 'aaa4857c5935401790db2c9f0f2818be');
-- by timestamp:
SELECT * FROM t AT (TIMESTAMP => '2024-04-02 15:19:02.484304'::TIMESTAMP);
-- by stream:
SELECT * FROM t AT (STREAM => s);
┌─────────────────┐
│ a │
├─────────────────┤
│ 1 │
│ 2 │
└─────────────────┘
-- Retrieve all columns from table 't' with data from 60 seconds ago
SELECT * FROM t AT (OFFSET => -60);