Anvisningar: Fråga med tidsresor på instruktionsnivå
I Microsoft Fabric låser funktionen för tidsresor upp möjligheten att köra frågor mot tidigare versioner av data utan att behöva generera flera datakopior, vilket sparar på lagringskostnaderna. I den här artikeln beskrivs hur du frågar efter lagertabeller med hjälp av tidsresor på instruktionsnivå med hjälp av T-SQL OPTION-satsen och SYNTAXEN FOR TIMESTAMP AS OF . Den här funktionen finns i förhandsgranskning.
Informationslagertabeller kan frågas upp till en kvarhållningsperiod på trettio kalenderdagar med hjälp OPTION
av -satsen, med datumformatet yyyy-MM-ddTHH:mm:ss[.fff]
.
Följande exempel kan köras i SQL Power Query-redigeraren, SQL Server Management Studio (SSMS), Azure Data Studio eller valfri T-SQL-frågeredigerare.
Kommentar
För närvarande används endast tidszonen Coordinated Universal Time (UTC) för tidsresor.
Tidsresor i en lagertabell
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');
Tidsresor för 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.
Begränsningar
Mer information om tidsresor på instruktionsnivåns begränsningar med FOR TIMESTAMP AS OF
finns i Begränsningar för tidsresor.