Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В Microsoft Fabric возможность перемещения по времени разблокирует возможность запрашивать предыдущие версии данных без необходимости создавать несколько копий данных, экономя на затратах на хранение. В этой статье описывается, как запрашивать таблицы хранилища с помощью перемещения по времени на уровне инструкции с помощью предложения T-SQL OPTION и синтаксиса FOR TIMESTAMP AS OF.
Таблицы хранилища можно запрашивать до тридцати календарных дней с помощью OPTION
предложения, предоставляя формат yyyy-MM-ddTHH:mm:ss[.fff]
даты.
Следующие примеры можно выполнить в редакторе запросов SQL, SQL Server Management Studio (SSMS),расширении mssql с помощью Visual Studio Code или любом редакторе запросов T-SQL.
Примечание.
В настоящее время для перемещения по времени используется только часовой пояс UTC.
Перемещение по времени в таблице склада
В этом примере показано, как перемещаться по отдельной таблице в хранилище.
Предложение OPTION T-SQL указывает точку во времени для возврата данных.
/* Time travel using a SELECT statement */
SELECT *
FROM [dbo].[dimension_customer]
OPTION (FOR TIMESTAMP AS OF '2024-05-02T20:44:13.700');
Перемещение по времени в нескольких таблицах хранилища
Предложение OPTION объявляется один раз на запрос, и результаты запроса отражают состояние данных в метке времени, указанной в запросе для всех таблиц.
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');
Перемещение по времени в хранимой процедуре
Хранимые процедуры — это набор инструкций SQL, которые предварительно компилируются и хранятся для многократного использования. Предложение OPTION можно объявить один раз в хранимой процедуре, а результирующий набор отражает состояние всех таблиц в указанной метке времени.
Предложение FOR TIMESTAMP AS OF
не может напрямую принимать переменную, так как значения в этом OPTION
предложении должны быть детерминированными. Для передачи строго типизированного значения даты и времени в хранимую процедуру можно использовать sp_executesql. Этот простой пример передает переменную и преобразует параметр datetime в необходимый формат с стилем даты 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
Затем можно вызвать хранимую процедуру и передать переменную в качестве строго типизированного параметра. Например:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = '2024-05-10T22:56:15.457';
EXEC dbo.sales_by_city @pointInTime;
Или, например:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = DATEADD(dd, -7, GETDATE())
EXEC dbo.sales_by_city @pointInTime;
Перемещение по времени в представлении
Представления представляют сохраненный запрос, который динамически извлекает данные из одной или нескольких таблиц при запросе представления. Предложение OPTION можно использовать для запроса представлений, чтобы результаты отражали состояние данных в метке времени, указанной в запросе.
--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');
- Исторические данные из таблиц в представлении можно запрашивать только для перемещения по времени, начиная с момента создания представления.
- После изменения представления запросы на поездки во времени действительны только после изменения.
- Если базовая таблица представления изменяется без изменения представления, запросы на поездки по времени в представлении могут возвращать данные до изменения таблицы, как ожидалось.
- Если базовая таблица представления удаляется и создается повторно, не изменяя представление, данные для запросов на поездки по времени доступны только с момента создания таблицы.
Путешествие во времени для операций DML
Язык обработки данных (DML) используется для вставки, создания и заполнения таблиц путем управления и преобразования существующих данных.
Предложение OPTION и OPTION (FOR TIMESTAMP AS OF ...
может использоваться вместе с операциями DML, такими как INSERT INTO ... SELECT
, CREATE TABLE AS SELECT
(CTAS) и SELECT INTO
.
/*Time travel for INSERT INTO...SELECT*/
INSERT INTO dbo.Fact_Sale_History
(SalesKey, StockItemKey, Quantity, Description, UnitPrice, InvoiceDateKey)
SELECT
SaleKey AS SalesKey,
StockItemKey,
Quantity,
Description,
UnitPrice,
InvoiceDateKey
FROM dbo.[Fact_Sale]
OPTION (FOR TIMESTAMP AS OF '2025-06-18T19:55:13.853');
/*Time travel for CREATE TABLE AS SELECT*/
CREATE TABLE dbo.SalesHistory AS
SELECT * FROM dbo.fact_sale
OPTION (FOR TIMESTAMP AS OF '2025-06-18T19:55:13.853');
/*Time travel for SELECT INTO*/
SELECT * INTO dbo.SalesHistory1
FROM dbo.fact_sale
OPTION (FOR TIMESTAMP AS OF '2025-06-18T19:55:13.853');
Ограничения
Дополнительные сведения об ограничениях по времени на уровне инструкций FOR TIMESTAMP AS OF
см. в разделе "Ограничения на поездки по времени".