Megosztás a következőn keresztül:


Útmutató: Lekérdezés időutazással az utasítás szintjén (előzetes verzió)

A Microsoft Fabricben az időutazás lehetősége lehetővé teszi az adatok korábbi verzióinak lekérdezését anélkül, hogy több adatmásolatot kellene létrehoznia, így a tárolási költségek is megtakaríthatók. Ez a cikk azt ismerteti, hogyan kérdezhetők le a raktártáblák az időutazással az utasítás szintjén, a T-SQL OPTION záradék és a FOR TIMESTAMP AS OF szintaxis használatával. Ez a szolgáltatás jelenleg előzetes kiadásban elérhető.

A raktártáblák legfeljebb harminc naptári napos megőrzési időtartamig kérdezhetők le a OPTION záradék használatával, megadva a dátumformátumot yyyy-MM-ddTHH:mm:ss[.fff].

Az alábbi példák végrehajthatók az SQL Lekérdezésszerkesztő, az SQL Server Management Studio (SSMS), az Azure Data Studio vagy bármely T-SQL lekérdezésszerkesztőben.

Feljegyzés

Az időutazáshoz jelenleg csak az egyezményes világidő (UTC) időzónája használható.

Időutazás egy raktártáblán

Ez a példa bemutatja, hogyan időzíteni az utazást egy adott táblán a raktárban.

Az OPTION T-SQL záradék az adatok visszaadásához megadott időpontot adja meg.

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

Időutazás több raktártáblán

Az OPTION záradékot lekérdezésenként egyszer deklarálja a rendszer, és a lekérdezés eredményei az adatok állapotát tükrözik az összes tábla lekérdezésében megadott időbélyegen.

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

Időutazás tárolt eljárásban

A tárolt eljárások olyan SQL-utasítások készletei, amelyek előre le vannak állítva és tárolva, hogy azok ismételten felhasználhatók legyenek. Az OPTION záradék egyszer deklarálható a tárolt eljárásban, az eredményhalmaz pedig az összes tábla állapotát tükrözi a megadott időbélyegen.

A FOR TIMESTAMP AS OF záradék nem fogad el közvetlenül változót, mivel az ebben OPTION a záradékban szereplő értékeknek determinisztikusnak kell lenniük. A sp_executesql használatával egy erősen beírt datetime értéket adhat át a tárolt eljárásnak. Ez az egyszerű példa egy változót ad át, és a datetime paramétert a szükséges formátumra alakítja 126-os dátumstílussal.

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

Ezután meghívhatja a tárolt eljárást, és átadhat egy változót erősen beírt paraméterként. Példa:

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

Vagy például:

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

Időutazás egy nézetben

A nézetek egy mentett lekérdezést jelölnek, amely dinamikusan lekéri az adatokat egy vagy több táblából, amikor lekérdezik a nézetet. Az OPTION záradékkal lekérdezhetők a nézetek, így az eredmények a lekérdezésben megadott időbélyegen tükrözik az adatok állapotát.

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

A nézet létrehozása előtt azonban nem kérdezhet le korábbi adatokat egy nézetben lévő táblákból.

Korlátozások

További információ az időutazásról az utasítási szintű korlátozásoknál FOR TIMESTAMP AS OF: Időutazás korlátozásai.