Udostępnij za pośrednictwem


Instrukcje: wykonywanie zapytań przy użyciu podróży w czasie na poziomie instrukcji (wersja zapoznawcza)

W usłudze Microsoft Fabric możliwość podróżowania w czasie umożliwia wykonywanie zapytań dotyczących poprzednich wersji danych bez konieczności generowania wielu kopii danych, co pozwala zaoszczędzić na kosztach magazynowania. W tym artykule opisano sposób wykonywania zapytań dotyczących tabel magazynu przy użyciu podróży w czasie na poziomie instrukcji, przy użyciu klauzuli T-SQL OPTION i składni TIMESTAMP AS OF. Ta funkcja jest aktualnie dostępna jako funkcja podglądu.

Tabele magazynu mogą być odpytywane do okresu przechowywania z siedmiu dni kalendarzowych przy użyciu OPTION klauzuli , podając format yyyy-MM-ddTHH:mm:ss[.fff]daty .

Poniższe przykłady można wykonać w programie SQL Edytor Power Query, SQL Server Management Studio (SSMS), Azure Data Studio lub dowolnym edytorze zapytań języka T-SQL.

Uwaga

Obecnie tylko strefa czasowa koordynowanego czasu uniwersalnego (UTC) jest używana do podróży w czasie.

Podróż w czasie w tabeli magazynu

W tym przykładzie pokazano, jak podróżować w poszczególnych tabelach w magazynie.

Klauzula T-SQL OPTION określa punkt w czasie, aby zwrócić dane.

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

Podróż w czasie w wielu tabelach magazynu

Klauzula OPTION jest zadeklarowana raz na zapytanie, a wyniki zapytania będą odzwierciedlać stan danych w znaczniku czasu określonym w zapytaniu dla wszystkich tabel.

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');

Podróż w czasie w procedurze składowanej

Procedury składowane to zestaw instrukcji SQL, które są wstępnie skompilowane i przechowywane, aby można było ich używać wielokrotnie. Klauzulę OPTION można zadeklarować raz w procedurze składowanej, a zestaw wyników odzwierciedla stan wszystkich tabel w określonym znaczniku czasu.

Klauzula FOR TIMESTAMP AS OF nie może bezpośrednio zaakceptować zmiennej, ponieważ wartości w tej OPTION klauzuli muszą być deterministyczne. Możesz użyć sp_executesql, aby przekazać silnie typizowaną wartość daty/godziny do procedury składowanej. Ten prosty przykład przekazuje zmienną i konwertuje parametr datetime na wymagany format z stylem daty 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

Następnie można wywołać procedurę składowaną i przekazać zmienną jako silnie typizowanego parametru. Na przykład:

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

Lub, na przykład:

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

Podróż w czasie w widoku

Widoki reprezentują zapisane zapytanie, które dynamicznie pobiera dane z co najmniej jednej tabeli przy każdym zapytaniu względem widoku. Klauzula OPTION może służyć do wykonywania zapytań względem widoków, aby wyniki odzwierciedlały stan danych w znaczniku czasu określonym w zapytaniu.

--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'); 

Nie można jednak wykonywać zapytań dotyczących poprzednich danych z tabel w widoku przed utworzeniem widoku.

Ograniczenia

Aby uzyskać więcej informacji na temat podróży w czasie na poziomie instrukcji FOR TIMESTAMP AS OFw przypadku , zobacz Ograniczenia podróży czasowej.