過去に存在していたデータに対してクエリを実行する
適用対象:✅Microsoft Fabric のウェアハウス
Microsoft Fabric のウェアハウスには、過去に存在していた履歴データに対してクエリを実行する機能が用意されています。 特定のタイムスタンプからデータをクエリする機能は、データ ウェアハウス業界では時間移動と呼ばれます。
- タイム トラベルによって、データの一貫性と精度を一定期間にわたって維持することで、安定したレポートが容易になります。
- タイム トラベルを使用すると、過去のさまざまな時点に対してクエリを実行して過去の傾向分析を行い、将来の傾向の予測に役立てることができます。
- タイム トラベルによって、以前のバージョンのデータ間の比較を低コストで簡単に行えるようになります。
- タイム トラベルは、パフォーマンスの推移を分析するのに役立ちます。
- タイム トラベルを使用すると、組織は時間の経過に伴うデータの変化を監査できます。この監査は、コンプライアンスの目的でよく必要になります。
- タイム トラベルは、機械学習モデルからの結果を再現するのに役立ちます。
- タイム トラベルでは、同じワークスペース内の複数のウェアハウス間で特定の時点に存在していたテーブルにクエリを実行できます。
タイム トラベルとは
データ ウェアハウスでのタイム トラベルは、以前のバージョンのデータに対してすばやくクエリを実行するための低コストで効率的な機能です。
現在、Microsoft Fabric では、次の方法で過去のデータの状態を取得できます。
FOR TIMESTAMP AS OF T-SQL コマンドを使用してタイム トラベルする
ウェアハウスのアイテム内では、OPTION FOR TIMESTAMP AS OF T-SQL 構文を使用してテーブルに対してクエリを実行し、過去の時点のデータを取得できます。 FOR TIMESTAMP AS OF
句は、結合されたすべてのウェアハウス テーブルを含め、ステートメント全体に影響します。
タイム トラベル クエリから取得された結果は、本質的に読み取り専用です。 FOR TIMESTAMP AS OF クエリ ヒントを使用している間は、INSERT、UPDATE、DELETE などの書き込み操作を実行できません。
OPTION 句を使用して、FOR TIMESTAMP AS OF クエリ ヒントを指定します。 クエリは、タイムスタンプに存在したとおりにデータを返します。YYYY-MM-DDTHH:MM:SS[.fff]
のように指定します。 次に例を示します。
SELECT *
FROM [dbo].[dimension_customer] AS DC
OPTION (FOR TIMESTAMP AS OF '2024-03-13T19:39:35.28'); --March 13, 2024 at 7:39:35.28 PM UTC
スタイル 126 の必要な datetime 形式の CONVERT
構文を使用します。
タイムスタンプは、クエリ、ストアド プロシージャ、ビューなどに OPTION
句を使用して 1 回だけ指定できます。OPTION
は SELECT ステートメント内のすべてのものに適用されます。
例については、「使い方: タイム トラベルを使用してクエリを実行する」を参照してください。
データの保持
Microsoft Fabric では、ウェアハウスは、さまざまなバージョンのデータを自動的に保存して維持します。既定の保持期間は 30 日間です。 これにより、過去の時点のテーブルに対してクエリを実行できます。 データ ウェアハウスに対するすべての挿入、更新、削除が保持されます。 保持期間は、ウェアハウスが作成された時点から自動的に開始されます。 期限切れのファイルは、保持期間のしきい値が経過した後に自動的に削除されます。
- 現在、
FOR TIMESTAMP AS OF
クエリ ヒントを含むSELECT
ステートメントは、テーブル スキーマの最新バージョンを返します。 - テーブル内で削除されたレコードに対しては、その削除が保持期間内に行われたのであれば、削除前に存在していたようにクエリを実行できます。
- テーブルのスキーマに加えられた変更 (テーブルの列の追加または削除を含むがこれらに限定されない) に対しては、スキーマ変更前にクエリを実行することはできません。 同様に、同じデータを持つテーブルを削除して再作成すると、その履歴が削除されます。
タイム トラベルのシナリオ
次のシナリオでは、過去のデータにタイム トラベルする機能を検討してください。
安定したレポート
絶えず変化するデータのランドスケープに対応するには抽出、変換、読み込み (ETL) ジョブを頻繁に実行することが不可欠です。 タイム トラベル機能は、データ整合性を確保しながら、バックグラウンド処理が進行中でも、過去の特定の時点 (前日の夜など) で返されたクエリ結果に基づいてレポートを生成する柔軟性を提供することで、この目標を達成できるよう支援します。
ETL アクティビティは、以前の時点の同じテーブルに対してクエリが実行されている間に同時に実行できます。
過去の傾向と予測分析
タイム トラベルによって過去のデータの分析を簡単に行えるようになるため、過去のさまざまな期間のデータにクエリを実行することで、重要な傾向とパターンを明らかにするのに役立ちます。 それによって、過去のデータセットを使用した実験や予測モデルのトレーニングが可能になり、予測分析が容易になります。 これは、将来の傾向を予測する場合や、十分な情報に基づいてデータ ドリブンの意思決定を行う場合に役立ちます。
分析と比較
タイム トラベルでは、分析と比較で過去のレンズを使用できるようにすることで、効率的でコスト効率の高いトラブルシューティング機能を実現し、根本原因の特定を容易に行えるようにします。
パフォーマンス分析
タイム トラベルは、ウェアハウス クエリのパフォーマンスの推移を分析するのに役立ちます。 これにより、どのクエリを最適化できるかに基づいてパフォーマンスの低下傾向を特定できます。
監査とコンプライアンス
タイム トラベルは、監査者がデータ履歴を参照できるようにすることで、監査とコンプライアンスの手順を効率化します。 規制への準拠を維持するのに役立つだけでなく、保証と透明性の向上にも役立ちます。
機械学習モデル
タイム トラベル機能で過去データの分析が容易になり、実際のシナリオをシミュレートできるため、機械学習モデルの結果を再現するのに役立ちます。 これにより、モデルの全体的な信頼性が向上し、正確なデータ ドリブンの意思決定を行うことができます。
設計上の考慮事項
OPTION FOR TIMESTAMP AS OF クエリ ヒントに関する考慮事項:
FOR TIMESTAMP AS OF
クエリ ヒントを使用して、保持期間内の過去の時点のビューを作成することはできません。 これは、保持期間内の過去の時点のビューに対してクエリを実行するために使用できます。FOR TIMESTAMP AS OF
クエリ ヒントは、SELECT
ステートメント内で 1 回だけ使用できます。FOR TIMESTAMP AS OF
クエリ ヒントは、ストアド プロシージャのSELECT
ステートメント内で定義できます。
タイム トラベルに対するアクセス許可
管理者、メンバー、投稿者、または閲覧者ワークスペース ロールを持つユーザーは、過去の特定の時点のテーブルをクエリできます。 ユーザーがテーブルに対してクエリを実行すると、列レベル セキュリティ (CLS)、行レベル セキュリティ (RLS)、または動的データ マスク (DDM) によって課される制限が自動的に適用されます。
制限事項
タイムスタンプの秒の小数部を最大 3 桁まで指定します。 それ以上精度を高くすると、エラー メッセージ
An error occurred during timestamp conversion. Please provide a timestamp in the format yyyy-MM-ddTHH:mm:ss[.fff]. Msg 22440, Level 16, State 1, Code line 29
が表示されます。現在、タイム トラベルには協定世界時 (UTC) タイム ゾーンのみが使用されています。
現在、タイム トラベル クエリのデータ保持期間は 30 日間です。
OPTION
句のFOR TIMESTAMP AS OF
値は決定論的である必要があります。 パラメーター化の例については、「ストアド プロシージャでのタイム トラベル」を参照してください。タイム トラベルは、レイクハウスの SQL 分析エンドポイントではサポートされていません。
OPTION FOR TIMESTAMP AS OF
構文は、SELECT
ステートメントで始まるクエリでのみ使用できます。INSERT INTO SELECT
やCREATE TABLE AS SELECT
などのクエリとOPTION FOR TIMESTAMP AS OF
を共に使用することはできません。 代わりに、ある時点のウェアハウス テーブルのクローンを作成する機能を検討してください。ビュー定義に
OPTION FOR TIMESTAMP AS OF
構文を含めることはできません。 ビューに対しては、SELECT .. FROM <view> ... OPTION FOR TIMESTAMP AS OF
構文を使用してクエリを実行できます。 ただし、ビューが作成される前の時点から、ビュー内のテーブルの過去のデータに対してクエリを実行することはできません。タイム トラベルの
FOR TIMESTAMP AS OF
構文は、Power BI Desktop DirectQuery モードまたは [このデータを探索] オプションでは現在サポートされていません。