Postupy: Dotazování pomocí časového cestování na úrovni příkazu
V Microsoft Fabric je možnost časového cestování odemknout možnost dotazovat se na předchozí verze dat bez nutnosti vygenerovat více kopií dat, což šetří náklady na úložiště. Tento článek popisuje, jak dotazovat tabulky skladu pomocí časového cestování na úrovni příkazu, pomocí klauzule T-SQL OPTION a syntaxe FOR TIMESTAMP AS OF. Tato funkce je aktuálně dostupná jako ukázková verze.
Tabulky skladu lze dotazovat až do doby uchování třicet kalendářních dnů pomocí OPTION
klauzule, která poskytuje formát yyyy-MM-ddTHH:mm:ss[.fff]
data .
Následující příklady se dají spustit v SQL Editor Power Query, SQL Server Management Studiu (SSMS), Azure Data Studiu nebo libovolném editoru dotazů T-SQL.
Poznámka:
V současné době se pro časovou cestu používá pouze časové pásmo UTC (Coordinated Universal Time).
Časová cesta v tabulce skladu
Tento příklad ukazuje, jak časovat cestování na jednotlivé tabulky ve skladu.
Klauzule OPTION T-SQL určuje bod v čase pro vrácení dat.
/* Time travel using a SELECT statement */
SELECT *
FROM [dbo].[dimension_customer]
OPTION (FOR TIMESTAMP AS OF '2024-05-02T20:44:13.700');
Časová cesta na více tabulkách skladu
Klauzule OPTION se deklaruje jednou pro každý dotaz a výsledky dotazu budou odrážet stav dat v časovém razítku zadaném v dotazu pro všechny tabulky.
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');
Časová cesta v uložené proceduře
Uložené procedury jsou sada příkazů SQL, které jsou předkompilovány a uloženy, aby je bylo možné opakovaně používat. Klauzule OPTION lze deklarovat jednou v uložené proceduře a sada výsledků odráží stav všech tabulek v zadaném časovém razítku.
Klauzule FOR TIMESTAMP AS OF
nemůže přímo přijmout proměnnou, protože hodnoty v této OPTION
klauzuli musí být deterministické. K předání hodnoty datetime silného typu do uložené procedury můžete použít sp_executesql. Tento jednoduchý příklad předá proměnnou a převede parametr datetime na potřebný formát se stylem data 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
Pak můžete volat uloženou proceduru a předat proměnnou jako parametr silného typu. Příklad:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = '2024-05-10T22:56:15.457';
EXEC dbo.sales_by_city @pointInTime;
Nebo například:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = DATEADD(dd, -7, GETDATE())
EXEC dbo.sales_by_city @pointInTime;
Časová cesta v zobrazení
Zobrazení představují uložený dotaz, který dynamicky načítá data z jedné nebo více tabulek při každém dotazování zobrazení. Klauzuli OPTION lze použít k dotazování zobrazení tak, aby výsledky odrážely stav dat v časovém razítku zadaném v dotazu.
--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');
- Historická data z tabulek v zobrazení se dají dotazovat pouze na časovou cestu od doby vytvoření zobrazení.
- Po změně zobrazení jsou dotazy na časovou cestu platné až po změně.
- Pokud se podkladová tabulka zobrazení změní beze změny zobrazení, můžou dotazy na časovou cestu v zobrazení vrátit data před změnou tabulky podle očekávání.
- Když se podkladová tabulka zobrazení zahodí a znovu vytvoří beze změny zobrazení, budou data pro dotazy na časovou cestu k dispozici pouze po opětovném vytvoření tabulky.
Omezení
Další informace o časovém cestování na úrovni prohlášení omezení FOR TIMESTAMP AS OF
, naleznete v části Časové omezení cestování.