Hilfe & Anleitung: Abfrage mit Ortswechsel in der angegebenen Zeit auf Anweisungsebene
In Microsoft Fabric entsperrt die Funktionalität zum Ortswechsel in der angegebenen Zeit die Möglichkeit, die vorherigen Versionen von Daten abzufragen, ohne mehrere Datenkopien zu generieren, was zu Speicherkosten spart. In diesem Artikel wird beschrieben, wie Sie Warehouse-Tabellen mithilfe von Ortswechsel in der angegebenen Zeit auf Anweisungsebene abfragen, wobei die T-SQL OPTION-Klausel und die FOR TIMESTAMP AS OF-Syntax verwendet werden. Diese Funktion befindet sich derzeit in der Vorschau.
Warehouse-Tabellen können mithilfe der OPTION
-Klausel, die das Datumsformat yyyy-MM-ddTHH:mm:ss[.fff]
bereitstellt, bis zu einem Aufbewahrungszeitraum von dreißig Kalendertagen abgefragt werden.
Die folgenden Beispiele können in SQL Abfrage-Editor, SQL Server Management Studio (SSMS), Azure Data Studio oder einem beliebigen T-SQL-Abfrage-Editor ausgeführt werden.
Hinweis
Derzeit wird nur die UTC-Zeitzone (Coordinated Universal Time, koordinierte Weltzeit) für Ortswechsel in der angegebenen Zeit verwendet.
Ortswechsel in der angegebenen Zeit auf einer Warehouse-Tabelle
In diesem Beispiel wird gezeigt, wie Ortswechsel in der angegebenen Zeit auf einer einzelnen Tabelle im Warehouse ausgeführt werden.
Die OPTION T-SQL-Klausel gibt den Zeitpunkt an, an dem die Daten zurückgegeben werden sollen.
/* Time travel using a SELECT statement */
SELECT *
FROM [dbo].[dimension_customer]
OPTION (FOR TIMESTAMP AS OF '2024-05-02T20:44:13.700');
Ortswechsel in der angegebenen Zeit auf mehreren Warehouse-Tabellen
Die OPTION-Klausel wird einmal pro Abfrage deklariert und die Ergebnisse der Abfrage spiegeln den Status der Daten zum in der Abfrage für alle Tabellen angegebenen Zeitstempel wider.
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');
Ortswechsel in der angegebenen Zeit in einer gespeicherten Prozedur
Gespeicherte Prozeduren sind eine Reihe von SQL-Anweisungen, die vorkompiliert und gespeichert sind, damit sie wiederholt verwendet werden können. Die OPTION-Klausel kann einmal in der gespeicherten Prozedur deklariert werden, und das Resultset gibt den Status aller Tabellen zum angegebenen Zeitstempel wieder.
Die FOR TIMESTAMP AS OF
-Klausel kann eine Variable nicht direkt akzeptieren, da Werte in dieser OPTION
-Klausel deterministisch sein müssen. Sie können sp_executesql verwenden, um einen stark typisierten Datetime-Wert an die gespeicherte Prozedur zu übergeben. In diesem einfachen Beispiel wird eine Variable übergeben und der Datetime-Parameter in das erforderliche Format mit Datumsformat 126 konvertiert.
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
Anschließend können Sie die gespeicherte Prozedur aufrufen und eine Variable als stark typisierten Parameter übergeben. Zum Beispiel:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = '2024-05-10T22:56:15.457';
EXEC dbo.sales_by_city @pointInTime;
Alternativ gibt folgendes Beispiel:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = DATEADD(dd, -7, GETDATE())
EXEC dbo.sales_by_city @pointInTime;
Ortswechsel in der angegebenen Zeit in einer Ansicht
Ansichten stellen eine gespeicherte Abfrage dar, die Daten dynamisch aus einer oder mehreren Tabellen abruft, wenn die Ansicht abgefragt wird. Die OPTION-Klausel kann verwendet werden, um die Ansichten abzufragen, sodass die Ergebnisse den Status der Daten zum in der Abfrage angegebenen Zeitstempel widerspiegeln.
--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');
- Die historischen Daten aus Tabellen in einer Sicht können nur ab dem Zeitpunkt der Erstellung der Sicht als Zeitreise abgefragt werden.
- Wenn eine Sicht geändert wurde, sind Zeitreiseabfragen erst gültig, nachdem sie geändert wurden.
- Wenn eine zugrunde liegende Tabelle einer Sicht geändert wird, ohne die Sicht zu ändern, können Zeitreiseabfragen in der Sicht die Daten vor der Tabellenänderung wie erwartet zurückgeben.
- Wenn die zugrunde liegende Tabelle einer Sicht gelöscht und neu erstellt wird, ohne die Sicht zu ändern, sind Daten für Zeitreiseabfragen nur ab dem Zeitpunkt verfügbar, zu dem die Tabelle neu erstellt wurde.
Begrenzungen
Weitere Informationen über Ortswechsel in der angegebenen Zeit auf der Anweisungsebene mit FOR TIMESTAMP AS OF
finden Sie unter Einschränkungen bei Ortswechsel in der angegebenen Zeit.