すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:タイムトラベル

最終更新日:Jan 17, 2025

MaxComputeは、デルタテーブルでのタイムトラベルクエリと増分クエリの一般的なビジネスシナリオを効率的にサポートします。 タイムトラベルクエリを実行して、履歴バージョンのデータを照会できます。 たとえば、過去の時点でビジネスデータをバックトラックしたり、データエラーが発生したときにデータを修正するために過去の状態でデータを復元したりできます。 restore操作を直接実行して、データを特定の履歴バージョンに復元することもできます。

クエリ処理

次の図は、タイムトラベル機能を使用してDeltaテーブルからデータをクエリする方法を示しています。

image.png

SQL文を入力すると、エンジンは解析後にクエリするデータのバージョンを取得し、バージョンの時間範囲内で最新のベースファイルを検索し、ベースファイルの生成後にデータが書き込まれているデルタファイルを検索し、ベースファイルとデルタファイルのデータをマージして出力を生成します。 ベースファイルは、クエリと読み取りの効率を向上させるために使用できます。

上の図は、srcという名前のトランザクションテーブルのデータをクエリする方法を示しています。

  • テーブルのスキーマは、pk列とval列で構成されます。 上の図の左側は、データ変更プロセスを示しています。 時刻t1〜t5は、トランザクションの時刻バージョンを表す。 5つのデータ書き込みトランザクションが実行され、5つのデルタファイルが生成される。 時刻t2, t4でコンパクションが行われ、2つのベースファイルb1, b2が生成される。 履歴中間状態レコード (2,a) はベースファイルb1から削除され、最新の状態レコード (2,b) のみがベースファイルb1に保持される。

  • たとえば、時点t1で履歴データをクエリする場合、MaxComputeはDeltaファイルd1を読み取り、出力を生成するだけで済みます。 時点t2で履歴データをクエリする場合、MaxComputeはベースファイルb1のみを読み取り、3つのレコードを含む出力を生成する必要があります。 時点t3で履歴データをクエリする場合、MaxComputeはベースファイルb1のデータとDeltaファイルd3のデータをマージして出力を生成します。 同じルールに従って、他の時点のデータをクエリできます。 基本ファイルを使用してクエリを高速化できます。 ただし、基本ファイルのクエリは、大量のリソースを消費するコンパクション操作をトリガーします。 ビジネスシナリオに基づいて適切なトリガーポリシーを選択する必要があります。

  • タイムトラベル機能は、トランザクションバージョンのクエリに役立ちます。 時刻バージョンとIDバージョンの2種類のトランザクションバージョンがサポートされています。 SQL構文では、特定の定数と共通関数に加えて、get_latest_timestamp関数とget_latest_version関数が開発されます。 get_latest_timest_functionおよびget_latest_version関数の2番目のパラメーターは、データが最後にコミットされた回数を示します。 これにより、正確なクエリ用のMaxComputeの内部データバージョンを取得し、ユーザーエクスペリエンスを向上させることができます。

履歴データを照会できる期間

データの履歴ステータスは、履歴ステータスが保存されている場合にのみ、タイムトラベル機能を使用して照会できます。 テーブルプロパティacid.data.retain.hoursを設定して、履歴データが保持される期間を指定できます。 最大保持期間は7日です。 ビジネス要件に基づいて妥当な期間を指定することを推奨します。 データ保持期間が長いと、ストレージ料金が増加します。 タイムトラベル機能を使用する必要がない場合は、acid.data.retain.hoursプロパティを0に設定して、この機能を無効にすることを推奨します。 これにより、履歴データの保存コストを大幅に削減できます。