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.