Condividi tramite


Procedura: Eseguire query usando il tempo di spostamento a livello di istruzione (anteprima)

In Microsoft Fabric, la possibilità di viaggiare in tempo 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 warehouse usando il tempo di spostamento a livello di istruzione, usando la clausola T-SQL OPTION e la sintassi FOR TIMESTAMP AS OF. Questa funzionalità è attualmente disponibile solo in anteprima.

Le tabelle del warehouse possono essere sottoposte a query fino a un periodo di conservazione di sette giorni di calendario usando la OPTION clausola , specificando il formato yyyy-MM-ddTHH:mm:ss[.fff]di data .

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, viene usato solo il fuso orario UTC (Coordinated Universal Time).

Tempo di viaggio su una tabella magazzino

In questo esempio viene illustrato come spostarsi nel tempo in una singola tabella nel magazzino.

La clausola OPTION T-SQL specifica il temporizzato 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');

Tempo di viaggio su più tabelle di magazzino

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

Tempo di spostamento in una stored procedure

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 FOR TIMESTAMP AS OF clausola non può accettare direttamente una variabile, perché i valori di questa OPTION clausola 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 stile 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;

In alternativa, ad esempio:

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

Viaggio nel tempo in una visualizzazione

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

Tuttavia, non è possibile eseguire query sui dati precedenti dalle tabelle di una vista prima della creazione della vista.

Limiti

Per altre informazioni sul viaggio di tempo a livello di istruzione con , vedere Limitazioni FOR TIMESTAMP AS OFper i viaggi temporali.