Compartilhar via


Como: consultar usando viagem no tempo no nível de instrução

No Microsoft Fabric, a capacidade de viagem no tempo libera 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 de instrução, usando a cláusula OPTION T-SQL e a sintaxe FOR TIMESTAMP AS OF. Esse recurso está atualmente na visualização.

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

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.

Observação

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

Viagem no tempo em uma tabela de depósito

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

A cláusula OPTION T-SQL especifica o restauração pontual 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 tabelas de depósito

A cláusula OPTION é declarada uma vez por consulta. 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 cláusula FOR TIMESTAMP AS OF não pode aceitar diretamente uma variável, pois os valores nesta cláusula OPTION 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 no 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 visualização

Os modos de exibição representam uma consulta salva que recupera dinamicamente dados de uma ou mais tabelas sempre que o modo de exibição é consultado. A cláusula OPTION pode ser usada para consultar os modos de exibição 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 uma exibição só podem ser consultados para viagem no tempo a partir do momento em que a exibição foi criada.
  • Depois que um modo de exibição é alterado, as consultas de viagem no tempo só são válidas depois de alteradas.
  • Se uma tabela subjacente de uma exibição for alterada sem mudar a exibição, as consultas de viagem no tempo na exibição poderão retornar os dados antes da alteração da tabela, conforme o esperado.
  • Quando a tabela subjacente de um modo de exibição é descartada e recriada sem modificar a exibição, os dados das consultas de viagem no tempo só ficam disponíveis a partir do momento em que a tabela foi recriada.

Limitações

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