Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
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 edytorze zapytań SQL, programie SQL Server Management Studio (SSMS),rozszerzeniu mssql z programem Visual Studio Code 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.
Podróż czasowa dla operacji DML
Język manipulowania danymi (DML) służy do wstawiania, tworzenia i wypełniania tabel przez manipulowanie i przekształcanie istniejących danych.
Klauzula OPTION i OPTION (FOR TIMESTAMP AS OF ... może być używana wraz z operacjami DML, takimi jak INSERT INTO ... SELECT, CREATE TABLE AS SELECT (CTAS) i SELECT INTO.
/*Time travel for INSERT INTO...SELECT*/
INSERT INTO dbo.Fact_Sale_History
(SalesKey, StockItemKey, Quantity, Description, UnitPrice, InvoiceDateKey)
SELECT
SaleKey AS SalesKey,
StockItemKey,
Quantity,
Description,
UnitPrice,
InvoiceDateKey
FROM dbo.[Fact_Sale]
OPTION (FOR TIMESTAMP AS OF '2025-06-18T19:55:13.853');
/*Time travel for CREATE TABLE AS SELECT*/
CREATE TABLE dbo.SalesHistory AS
SELECT * FROM dbo.fact_sale
OPTION (FOR TIMESTAMP AS OF '2025-06-18T19:55:13.853');
/*Time travel for SELECT INTO*/
SELECT * INTO dbo.SalesHistory1
FROM dbo.fact_sale
OPTION (FOR TIMESTAMP AS OF '2025-06-18T19:55:13.853');
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.