チュートリアル: ウェアハウス内の T-SQL を使用したタイム トラベル

適用対象:✅ Warehouse in Microsoft Fabric

このチュートリアルでは、T-SQL ステートメントを使用して、ウェアハウス テーブル内の タイム トラベル を行う方法について説明します。 タイム トラベルとは、特定の時点に存在していたデータに対してクエリを実行することを意味します。

注

このチュートリアルでは、エンド ツー エンドのシナリオの一部を構成します。 このチュートリアルを完了するには、まず次のチュートリアルを完了する必要があります。

  1. ワークスペース を作成する
  2. 倉庫 を作成する
  3. Warehouse にデータを取り込む

タイム トラベル クエリを操作する

このタスクでは、売上別に上位 10 人の顧客のビューを作成する方法について説明します。 次のタスクのビューを使用して、タイムトラベル クエリを実行します。

  1. 最初のチュートリアル で作成したワークスペースが開かれていることを確認します。

  2. [ホーム] リボンの [新しい SQL クエリ] を選択します。

    リボンの [新しい SQL クエリ] オプションのスクリーンショット。

  3. クエリ エディターで、以下のコードを貼り付けます。 このコードでは、Top10Customersという名前のビューが作成されます。 このビューでは、クエリを使用して、売上に基づいて上位 10 人の顧客を取得します。

    --Create the Top10Customers view.
    CREATE VIEW [dbo].[Top10Customers]
    AS
    SELECT TOP(10)
        FS.[CustomerKey],
        DC.[Customer],
        SUM(FS.[TotalIncludingTax]) AS [TotalSalesAmount]
    FROM
        [dbo].[dimension_customer] AS DC
        INNER JOIN [dbo].[fact_sale] AS FS
            ON DC.[CustomerKey] = FS.[CustomerKey]
    GROUP BY
        FS.[CustomerKey],
        DC.[Customer]
    ORDER BY
        [TotalSalesAmount] DESC;
    
  4. クエリを実行します。

  5. 実行が完了したら、クエリの名前を Create Top 10 Customer Viewに変更します。

  6. エクスプローラーの ペインで、 スキーマの dbo フォルダー内から、Top10Customers ビューが存在することを確認します。

    [エクスプローラー] ウィンドウのスクリーンショット。新しく作成されたビューが強調表示されています。

  7. タイム トラベル クエリを操作する新しいクエリを作成します。

  8. クエリ エディターで、以下のコードを貼り付けます。 このコードは、1 つのファクト行の TotalIncludingTax 値を更新して、売上の合計を意図的に拡大します。 また、現在のタイムスタンプも取得します。

     --Update the TotalIncludingTax for a single fact row to deliberately inflate its total sales.
     UPDATE [dbo].[fact_sale]
     SET [TotalIncludingTax] = 200000000
     WHERE [SaleKey] = 22632918; --For customer 'Tailspin Toys (Muir, MI)'
     GO
    
     --Retrieve the current (UTC) timestamp.
     SELECT CURRENT_TIMESTAMP;
    

    注

    現在、タイム トラベルには世界協定時刻 (UTC) タイム ゾーンのみを使用できます。

  9. クエリを実行します。

  10. 実行が完了したら、クエリの名前を Time Travelに変更します。

  11. 結果 ペインで、タイムスタンプの値に注目します (値は現在の UTC 日時になります)。

    [結果] ウィンドウのスクリーンショット。コピーするタイムスタンプ値が強調表示されています。

  12. 現在上位 10 人の顧客を取得するには、新しいクエリ エディターに次のステートメントを貼り付けます。 このコードでは、FOR TIMESTAMP AS OF クエリ ヒントを使用して上位 10 人の顧客を取得します。

     --Retrieve the top 10 customers as of now.
     SELECT *
     FROM [dbo].[Top10Customers]
     OPTION (FOR TIMESTAMP AS OF 'YOUR_TIMESTAMP');
    
  13. クエリの名前を Time Travel Nowに変更します。

  14. Time Travel クエリに戻り、Copy コマンドを使用してクエリ結果をコピーします。

    [コピー] コマンドのスクリーンショット。[クエリのコピー] の結果が強調表示されています。

  15. Time Travel Now クエリに戻り、YOUR_TIMESTAMP をクリップボードにコピーしたタイムスタンプに置き換えます。

    Important

    FOR TIMESTAMP AS OFリテラルは最大で3桁の分数秒(yyyy-MM-ddTHH:mm:ss[.fff]形式)を受け入れます。 コピーした値に3桁以上の分数秒数(例: 2024-05-02T20:44:13.7700000)がある場合は、ミリ秒単位(2024-05-02T20:44:13.770)にトリミングしてください。 高精度リテラルは変換誤差で失敗します。 詳細は 「タイムトラベルの制限」を参照してください。

  16. クエリを実行し、2 番目の先頭 CustomerKey 値が Tailspin Toys (Muir, MI)の場合は 49 であることに注意してください。

  17. タイムスタンプから 1 分間の を減算して、タイムスタンプ値を以前の時刻 に変更します。

  18. もう一度クエリを実行し、2 番目の一番上の CustomerKey 値が Wingtip Toys (Sarversville, PA)の場合は 381 であることに注意してください。

ヒント

タイム トラベルの例については、「方法: ステートメント レベルでタイム トラベルを使用してクエリを実行」を参照してください。

次のステップ