다음을 통해 공유


방법: 문 수준에서 시간 이동으로 쿼리(미리 보기)

Microsoft Fabric에서 시간 이동 기능은 여러 데이터 복사본을 생성할 필요 없이 이전 버전의 데이터를 쿼리하는 기능을 잠금 해제하여 스토리지 비용을 절감합니다. 이 문서에서는 T-SQL OPTION 절FOR TIMESTAMP AS OF 구문을 사용하여 문 수준에서 시간 이동으로 웨어하우스 테이블을 쿼리하는 방법을 설명합니다. 이 기능은 현지 미리 보기로 제공됩니다.

웨어하우스 테이블은 절을 사용하여 OPTION 30일의 보존 기간까지 쿼리하여 날짜 형식을 제공할 수 있습니다 yyyy-MM-ddTHH:mm:ss[.fff].

다음 예제는 SQL 쿼리 편집기, SSMS(SQL Server Management Studio), Azure Data Studio 또는 T-SQL 쿼리 편집기에서 실행할 수 있습니다.

참고 항목

현재는 시간 이동에 UTC(협정 세계시) 표준 시간대만 사용됩니다.

창고 테이블의 시간 이동

이 예제에서는 웨어하우스의 개별 테이블에서 이동 시간을 지정하는 방법을 보여 줍니다.

OPTION T-SQL 절데이터를 반환할 지정 시간을 지정합니다.

/* Time travel using a SELECT statement */
SELECT *
FROM [dbo].[dimension_customer]
OPTION (FOR TIMESTAMP AS OF '2024-05-02T20:44:13.700');

여러 웨어하우스 테이블의 시간 이동

OPTION 절쿼리당 한 번씩 선언되며 쿼리 결과는 모든 테이블에 대한 쿼리에 지정된 타임스탬프의 데이터 상태를 반영합니다.

SELECT Sales.StockItemKey, 
Sales.Description, 
CAST (Sales.Quantity AS int)) AS SoldQuantity, 
c.Customer
FROM [dbo].[fact_sale] AS Sales INNER JOIN [dbo].[dimension_customer] AS c
ON Sales.CustomerKey = c.CustomerKey
GROUP BY Sales.StockItemKey, Sales.Description, Sales.Quantity, c.Customer
ORDER BY Sales.StockItemKey
OPTION (FOR TIMESTAMP AS OF '2024-05-02T20:44:13.700');

저장 프로시저의 시간 이동

저장 프로시저는 반복적으로 사용할 수 있도록 미리 컴파일되고 저장되는 SQL 문 집합입니다. OPTION 절저장 프로시저에서 한 번 선언할 수 있으며 결과 집합은 지정된 타임스탬프에 있는 모든 테이블의 상태를 반영합니다.

OPTION 절의 값은 FOR TIMESTAMP AS OF 결정적이어야 하므로 절에서 변수를 직접 수락할 수 없습니다. sp_executesql 사용하여 강력한 형식의 datetime 값을 저장 프로시저에 전달할 수 있습니다. 이 간단한 예제에서는 변수를 전달하고 datetime 매개 변수를 날짜 스타일 126을 사용하여 필요한 형식으로 변환합니다.

CREATE PROCEDURE [dbo].[sales_by_city] (@pointInTime DATETIME)
AS
BEGIN
DECLARE @selectForTimestampStatement NVARCHAR(4000);
DECLARE @pointInTimeLiteral VARCHAR(33);

SET @pointInTimeLiteral = CONVERT(VARCHAR(33), @pointInTime, 126);
SET @selectForTimestampStatement = '
SELECT *
    FROM [dbo].[fact_sale] 
    OPTION (FOR TIMESTAMP AS OF ''' + @pointInTimeLiteral + ''')';
 
    EXEC sp_executesql @selectForTimestampStatement
END

그런 다음 저장 프로시저를 호출하고 변수를 강력한 형식의 매개 변수로 전달할 수 있습니다. 예시:

--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = '2024-05-10T22:56:15.457';
EXEC dbo.sales_by_city @pointInTime;

또는 다음 예시가 있습니다.

--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = DATEADD(dd, -7, GETDATE())
EXEC dbo.sales_by_city @pointInTime;

보기에서의 시간 이동

뷰는 뷰를 쿼리할 때마다 하나 이상의 테이블에서 데이터를 동적으로 검색하는 저장된 쿼리를 나타냅니다. OPTION 절결과를 쿼리에 지정된 타임스탬프의 데이터 상태를 반영하도록 뷰를 쿼리하는 데 사용할 수 있습니다.

--Create View
CREATE VIEW Top10CustomersView
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;

/*View of Top10 Customers as of a point in time*/
SELECT *
FROM [Timetravel].[dbo].[Top10CustomersView]
OPTION (FOR TIMESTAMP AS OF '2024-05-01T21:55:27.513'); 

그러나 뷰를 만들기 전의 뷰에 있는 테이블의 과거 데이터를 쿼리할 수는 없습니다.

제한 사항

설명 수준 제한 사항의 시간 여행에 대한 자세한 내용은 시간 이동 제한을 FOR TIMESTAMP AS OF참조 하세요.