Eventi
31 mar, 23 - 2 apr, 23
Il più grande evento di apprendimento di Fabric, Power BI e SQL. 31 marzo - 2 aprile. Usare il codice FABINSIDER per salvare $400.
Iscriviti oggi stessoQuesto browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare i vantaggi di funzionalità più recenti, aggiornamenti della sicurezza e supporto tecnico.
In Microsoft Fabric, la possibilità di eseguire time travel consente di eseguire query sulle versioni precedenti dei dati senza dover generare più copie di dati, risparmiando sui costi di archiviazione. Questo articolo descrive come eseguire query sulle tabelle del magazzino usando il time travel a livello di istruzione, usando la clausola OPTION di T-SQL e la sintassi FOR TIMESTAMP AS OF. Questa funzionalità è attualmente disponibile solo in anteprima.
È possibile eseguire query sulle tabelle del magazzino fino a un periodo di conservazione di trenta giorni di calendario usando la clausola OPTION
, specificando il formato di data yyyy-MM-ddTHH:mm:ss[.fff]
.
Gli esempi seguenti possono essere eseguiti in SQL Editor di query, SQL Server Management Studio (SSMS), Azure Data Studio o qualsiasi editor di query T-SQL.
Nota
Attualmente, per il time travel, viene usato solo il fuso orario Coordinated Universal Time (UTC).
In questo esempio viene illustrato come eseguire un time travel in una singola tabella nel magazzino.
La clausola OPTION di T-SQL specifica il punto temporale per restituire i dati.
/* Time travel using a SELECT statement */
SELECT *
FROM [dbo].[dimension_customer]
OPTION (FOR TIMESTAMP AS OF '2024-05-02T20:44:13.700');
La clausola OPTION viene dichiarata una volta per ogni query e i risultati della query rifletteranno lo stato dei dati in corrispondenza del timestamp specificato nella query per tutte le tabelle.
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');
Le stored procedure sono un set di istruzioni SQL precompilate e archiviate in modo che possano essere usate ripetutamente. La clausola OPTION può essere dichiarata una sola volta nella stored procedure e il set di risultati riflette lo stato di tutte le tabelle nel timestamp specificato.
La clausola FOR TIMESTAMP AS OF
non può accettare direttamente una variabile, perché i valori di questa clausola OPTION
devono essere deterministici. È possibile usare sp_executesql per passare un valore datetime fortemente tipizzato alla stored procedure. Questo semplice esempio passa una variabile e converte il parametro datetime nel formato necessario con lo stile di 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
È quindi possibile chiamare la stored procedure e passare una variabile come parametro fortemente tipizzato. Ad esempio:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = '2024-05-10T22:56:15.457';
EXEC dbo.sales_by_city @pointInTime;
O ad esempio:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = DATEADD(dd, -7, GETDATE())
EXEC dbo.sales_by_city @pointInTime;
Le viste rappresentano una query salvata che recupera in modo dinamico i dati da una o più tabelle ogni volta che viene eseguita una query sulla vista. La clausola OPTION può essere usata per eseguire query sulle viste in modo che i risultati riflettano lo stato dei dati in corrispondenza del timestamp specificato nella query.
--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');
Per altre informazioni sulle limitazioni del time travel a livello di istruzione con FOR TIMESTAMP AS OF
, vedere Limitazioni del time travel.
Eventi
31 mar, 23 - 2 apr, 23
Il più grande evento di apprendimento di Fabric, Power BI e SQL. 31 marzo - 2 aprile. Usare il codice FABINSIDER per salvare $400.
Iscriviti oggi stesso