テーブル履歴の表示(タイムトラベルの基本)
メニューを表示するにはスワイプしてください
タイムトラベルは、Delta Lake の機能であり、テーブルの過去バージョンをクエリすることを可能にします。トランザクションログを利用することで、Databricks は記録された任意の時点のデータ状態を再構築できます。
Databricks の最も強力な「セーフティネット」の一つは、誰がテーブルを変更したか、いつ変更したか、変更前のデータがどのような状態だったかを正確に確認できる点です。
workspace.workshop.diamonds のダイヤモンドテーブルでは、すべての更新や削除が自動的に追跡されます。
1. DESCRIBE HISTORY コマンド
データの完全なタイムラインを確認するには、DESCRIBE HISTORY コマンドを使用します。これにより、テーブルのすべてのバージョンの詳細な記録が提供されます。
DESCRIBE HISTORY workspace.workshop.diamonds
このコマンドを実行すると、次の主要なカラムを持つテーブルが表示されます:
- version: 0 から始まる整数(テーブルが初めて作成された時点);
- timestamp: 変更が発生した正確な日時;
- userName: 操作を実行したユーザー名;
- operation: 実行された操作(例:
WRITE,UPDATE,DELETE,MERGEなど); - operationParameters: 変更に関する技術的な詳細。
2. 特定バージョンのクエリ
最近の更新で「Price」列に問題が発生した場合、VERSION AS OF構文を使用して、元の値が含まれる特定の過去バージョンを参照可能。
-- Look at the diamonds table exactly as it was in Version 0
SELECT * FROM workspace.workshop.diamonds VERSION AS OF 0
3. タイムスタンプによるクエリ
バージョン番号が不明でも、特定の時点でデータが正しかったことが分かっていれば、TIMESTAMP AS OFを使ってその時点に「タイムトラベル」可能。
-- Look at the data as it existed at a specific time
SELECT * FROM workspace.workshop.diamonds TIMESTAMP AS OF '2026-02-11 09:00:00'
4. この機能の重要性
従来のデータベースでは、DELETEコマンドをWHERE句なしで誤って実行した場合、データベース管理者に連絡してバックアップを復元してもらう必要があり、数時間かかることもある。
Delta Lake Time Travelを使えば、過去バージョンのデータを選択して現在の壊れたテーブルを健全な履歴データで上書きすることで、数秒でミスを修正可能。
5. 履歴の管理
デフォルトでは、Delta Lake は30日間の履歴を保持します。これは非常に便利ですが、履歴を保存するためには古いデータファイルを保持する必要があります。ただし、削除または上書きされたバージョンの基礎となるデータファイルは、delta.deletedFileRetentionDuration により 7 日間のみ保持され、その後 VACUUM コマンドでクリーンアップされます。
実務環境では、データエンジニアが VACUUM コマンドを使用して非常に古いファイルを削除し、ストレージコストを削減します。本コースでは、履歴は安全に保存されており、自由に探索できます。
VACUUM は、Delta Lake が不要と判断した古いデータファイル(更新・削除・上書き後に残されたファイル)を完全に削除するクリーンアップコマンドです。
VACUUM workspace.workshop.diamonds
デフォルトでは、Delta はタイムトラベル用に30日間のファイル履歴を保持します。VACUUM はこの期間より古いファイルを削除し、ストレージ容量を節約します。
保持期間をカスタマイズすることも可能です:
VACUUM workspace.workshop.diamonds RETAIN 7 HOURS
1. どの SQL コマンドを使うと、テーブルに対して行われたすべての過去バージョンと操作の一覧を確認できますか?
2. 誤って diamonds テーブルを更新してしまい、10 分前のデータを確認したい場合、どの構文を使うべきですか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください