Instrukcje: wykonywanie zapytań przy użyciu podróży w czasie na poziomie instrukcji
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 30 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');
- Dane historyczne z tabel w widoku mogą być odpytywane tylko pod kątem podróży w czasie rozpoczynającym się od momentu utworzenia widoku.
- Po zmianie widoku zapytania dotyczące podróży w czasie są prawidłowe tylko po jego zmianie.
- Jeśli tabela bazowa widoku zostanie zmieniona bez zmiany widoku, zapytania dotyczące podróży w czasie w widoku mogą zwracać dane z przed zmianą tabeli zgodnie z oczekiwaniami.
- Gdy podstawowa tabela widoku zostanie porzucona i utworzona ponownie bez modyfikowania widoku, dane dla zapytań dotyczących podróży czasowych są dostępne tylko od momentu ponownego utworzenia tabeli.
Ograniczenia
Aby uzyskać więcej informacji na temat podróży w czasie na poziomie instrukcji FOR TIMESTAMP AS OF
w przypadku , zobacz Ograniczenia podróży czasowej.