Cómo: realizar consultas mediante el viaje en el tiempo a nivel en el nivel de instrucción
En Microsoft Fabric, la capacidad de viajar en el tiempo desbloquea la capacidad de consultar las versiones anteriores de datos sin necesidad de generar varias copias de datos, lo que ahorra costos de almacenamiento. En este artículo se describe cómo consultar tablas de almacenamiento con desplazamiento de tiempo en el nivel de instrucción, mediante la cláusula T-SQL OPTION y la sintaxis FOR TIMESTAMP AS OF. Esta funcionalidad actualmente está en su versión preliminar.
Las tablas de almacenamiento se pueden consultar hasta un período de retención de treinta días naturales mediante la cláusula OPTION
, proporcionando el formato de fecha yyyy-MM-ddTHH:mm:ss[.fff]
.
Los siguientes ejemplos se pueden ejecutar en el Editor de consultas SQL, SQL Server Management Studio (SSMS), Azure Data Studio o cualquier editor de consultas T-SQL.
Nota:
Actualmente, solo se usa la zona horaria de hora universal coordinada (UTC) para el viaje en el tiempo.
Viaje en el tiempo en una tabla de almacenamiento
En este ejemplo se muestra cómo viajar en el tiempo en una tabla individual en el almacén.
La cláusula OPTION T-SQL especifica el momento dado para devolver los datos.
/* Time travel using a SELECT statement */
SELECT *
FROM [dbo].[dimension_customer]
OPTION (FOR TIMESTAMP AS OF '2024-05-02T20:44:13.700');
Viaje en el tiempo en múltiples mesas de almacén
La cláusula OPTION se declara una vez por consulta y los resultados de la consulta reflejarán el estado de los datos en la marca de tiempo especificada en la consulta para todas las tablas.
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');
Viaje en el tiempo en un procedimiento almacenado
Los procedimientos almacenados son un conjunto de instrucciones SQL precompiladas y almacenadas para que se puedan usar repetidamente. La cláusula OPTION se puede declarar una vez en el procedimiento almacenado y el conjunto de resultados refleja el estado de todas las tablas en la marca de tiempo especificada.
La cláusula FOR TIMESTAMP AS OF
no puede aceptar directamente una variable, ya que los valores de esta cláusula OPTION
deben ser deterministas. Puede usar sp_executesql para pasar un valor datetime fuertemente tipado al procedimiento almacenado. En este ejemplo sencillo se pasa una variable y se convierte el parámetro datetime en el formato necesario con el estilo de fecha 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
A continuación, puede llamar al procedimiento almacenado y pasar una variable como parámetro fuertemente tipado. Por ejemplo:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = '2024-05-10T22:56:15.457';
EXEC dbo.sales_by_city @pointInTime;
O, por ejemplo:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = DATEADD(dd, -7, GETDATE())
EXEC dbo.sales_by_city @pointInTime;
Viaje en el tiempo en una vista
Las vistas representan una consulta guardada que recupera dinámicamente datos de una o varias tablas cada vez que se consulta la vista. La cláusula OPTION se puede usar para consultar las vistas para que los resultados reflejen el estado de los datos en la marca de tiempo especificada en la 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');
- Los datos históricos de las tablas de una vista solo se pueden consultar para el viaje en el tiempo a partir del momento en que se creó la vista.
- Después de modificar una vista, las consultas de viaje en el tiempo solo son válidas después de modificarla.
- Si se modifica una tabla subyacente de una vista sin cambiar la vista, las consultas de viaje en el tiempo de la vista pueden devolver los datos de antes de que cambie la tabla, según lo previsto.
- Cuando se quita y vuelve a crear la tabla subyacente de una vista sin modificar la vista, los datos de las consultas de viaje en el tiempo solo están disponibles desde el momento en que se vuelve a crear la tabla.
Limitaciones
Para obtener más información sobre los viajes en el tiempo en el nivel de instrucción con FOR TIMESTAMP AS OF
, consulte Limitaciones de viajar en el tiempo.