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.