Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I Microsoft Fabric möjliggör time travel att ställa frågor mot tidigare dataversioner utan att behöva generera flera datakopior, vilket sparar på lagringskostnaderna. I den här artikeln beskrivs hur du ställer frågor om lagertabeller med tidsresor på uttalsnivå, med hjälp av T-SQL OPTION-satsen och syntaxen FOR TIMESTAMP AS OF.
Informationslagertabeller kan sökas upp till en kvarhållningsperiod på trettio kalenderdagar genom att använda klausulen OPTION och datumformatet yyyy-MM-ddTHH:mm:ss[.fff].
Följande exempel kan köras i SQL Query Editor, SQL Server Management Studio (SSMS), MSSQL-tillägget för Visual Studio Code eller valfri T-SQL-query editor.
Kommentar
För närvarande används endast tidszonen Coordinated Universal Time (UTC) för tidsresor.
Tidsresor i en lagerdatatabell
Det här exemplet visar hur du tar tid på en enskild tabell i lager.
T-SQL-satsen OPTION anger tidpunkten för att returnera data.
/* Time travel using a SELECT statement */
SELECT *
FROM [dbo].[dimension_customer]
OPTION (FOR TIMESTAMP AS OF '2024-05-02T20:44:13.700');
Tidsresa på flera lagertabeller
OPTION-satsen deklareras en gång per fråga och resultatet av frågan återspeglar tillståndet för data vid den tidsstämpel som anges i frågan för alla tabeller.
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');
Tidsresor i en lagrad procedur
Lagrade procedurer är en uppsättning SQL-instruktioner som är förkompilerade och lagrade så att de kan användas upprepade gånger. OPTION-satsen kan deklareras en gång i den lagrade proceduren och resultatuppsättningen återspeglar tillståndet för alla tabeller vid den angivna tidsstämpeln.
FOR TIMESTAMP AS OF Satsen kan inte acceptera en variabel direkt, eftersom värdena i den här OPTION satsen måste vara deterministiska. Du kan använda sp_executesql för att skicka ett starkt skrivet datetime-värde till den lagrade proceduren. Det här enkla exemplet skickar en variabel och konverterar datetime-parametern till det format som krävs med datumformat 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
Sedan kan du anropa den lagrade proceduren och skicka in en variabel som en starkt typad parameter. Till exempel:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = '2024-05-10T22:56:15.457';
EXEC dbo.sales_by_city @pointInTime;
Eller till exempel:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = DATEADD(dd, -7, GETDATE())
EXEC dbo.sales_by_city @pointInTime;
Tidsresor i en vy
Vyer representerar en sparad fråga som dynamiskt hämtar data från en eller flera tabeller när vyn efterfrågas. OPTION-satsen kan användas för att köra frågor mot vyerna så att resultatet återspeglar datatillståndet vid den tidsstämpel som anges i frågan.
--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');
- Historiska data från tabeller i en vy kan bara efterfrågas för tidsresor som börjar från den tidpunkt då vyn skapades.
- När en vy har ändrats är frågor om tidsresor endast giltiga efter att den har ändrats.
- Om en underliggande tabell i en vy ändras utan att vyn ändras, kan tidsresefrågor i vyn returnera data från innan tabellen ändras som förväntat.
- När den underliggande tabellen i en vy tas bort och återskapas utan att ändra vyn är data för tidsresefrågor endast tillgängliga från den tidpunkt då tabellen återskapades.
Tidsresa för DML-åtgärder
DML (Data Manipulation Language) används för att infoga, skapa och fylla i tabellerna genom att manipulera och transformera befintliga data.
OPTION-satsen och OPTION (FOR TIMESTAMP AS OF ... kan användas tillsammans med DML-åtgärder som INSERT INTO ... SELECT, CREATE TABLE AS SELECT (CTAS) och 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');
Begränsningar
Mer information om tidsresor på instruktionsnivåns begränsningar med FOR TIMESTAMP AS OFfinns i Begränsningar för tidsresor.