Partilhar via


Como: Consultar usando viagem no tempo no nível da instrução

No Microsoft Fabric, a capacidade de viajar no tempo desbloqueia a capacidade de consultar as versões anteriores dos dados sem a necessidade de gerar várias cópias de dados, economizando nos custos de armazenamento. Este artigo descreve como consultar tabelas de depósito usando viagem no tempo no nível da instrução, usando a cláusula T-SQL OPTION e a sintaxe PARA CARIMBO DE DATA/HORA A PARTIR DE. Esta funcionalidade está atualmente em pré-visualização.

As tabelas de depósito podem ser consultadas até um período de retenção de trinta dias corridos usando a OPTION cláusula, fornecendo o formato yyyy-MM-ddTHH:mm:ss[.fff]de data.

Os exemplos a seguir podem ser executados no Editor de Consultas SQL, no SQL Server Management Studio (SSMS), no Azure Data Studio ou em qualquer editor de consultas T-SQL.

Nota

Atualmente, apenas o fuso horário UTC (Tempo Universal Coordenado) é usado para viagens no tempo.

Viagem no tempo em uma mesa de armazém

Este exemplo mostra como viajar no tempo em uma mesa individual no depósito.

A cláusula OPTION T-SQL especifica o point-in-time para retornar os dados.

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

Viagem no tempo em várias mesas de armazém

A cláusula OPTION é declarada uma vez por consulta, e os resultados da consulta refletirão o estado dos dados no carimbo de data/hora especificado na consulta para todas as tabelas.

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

Viagem no tempo em um procedimento armazenado

Procedimentos armazenados são um conjunto de instruções SQL que são pré-compiladas e armazenadas para que possam ser usadas repetidamente. A cláusula OPTION pode ser declarada uma vez no procedimento armazenado e o conjunto de resultados reflete o estado de todas as tabelas no carimbo de data/hora especificado.

A FOR TIMESTAMP AS OF cláusula não pode aceitar diretamente uma variável, pois os valores nesta OPTION cláusula devem ser determinísticos. Você pode usar sp_executesql para passar um valor datetime fortemente tipado para o procedimento armazenado. Este exemplo simples passa uma variável e converte o parâmetro datetime para o formato necessário com o estilo de 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

Em seguida, você pode chamar o procedimento armazenado e passar uma variável como um parâmetro fortemente tipado. Por exemplo:

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

Ou, por exemplo:

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

Viagem no tempo em uma vista

As exibições representam uma consulta salva que recupera dinamicamente dados de uma ou mais tabelas sempre que a exibição é consultada. A cláusula OPTION pode ser usada para consultar as exibições para que os resultados reflitam o estado dos dados no carimbo de data/hora especificado na consulta.

--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'); 
  • Os dados históricos de tabelas em um modo de exibição só podem ser consultados para viagens no tempo a partir do momento em que o modo de exibição foi criado.
  • Depois que um modo de exibição é alterado, as consultas de viagem no tempo só são válidas depois que ele foi alterado.
  • Se uma tabela subjacente de um modo de exibição for alterada sem alterá-lo, as consultas de viagem no tempo no modo de exibição poderão retornar os dados de antes da alteração da tabela, conforme o esperado.
  • Quando a tabela subjacente de um modo de exibição é descartada e recriada sem modificar o modo de exibição, os dados para consultas de viagem no tempo só estão disponíveis a partir do momento após a tabela ter sido recriada.

Limitações

Para obter mais informações sobre viagens no tempo no nível da instrução com FOR TIMESTAMP AS OF, consulte Limitações de viagem no tempo.