Cara: Mengkueri menggunakan perjalanan waktu di tingkat pernyataan (pratinjau)
Di Microsoft Fabric, kemampuan untuk perjalanan waktu membuka kemampuan untuk mengkueri versi data sebelumnya tanpa perlu menghasilkan beberapa salinan data, menghemat biaya penyimpanan. Artikel ini menjelaskan cara mengkueri tabel gudang menggunakan perjalanan waktu di tingkat pernyataan, menggunakan klausa T-SQL OPTION dan sintaks FOR TIMESTAMP AS OF. Fitur ini masih dalam mode pratinjau.
Tabel gudang dapat dikueri hingga periode retensi tiga puluh hari kalender menggunakan OPTION
klausul , memberikan format yyyy-MM-ddTHH:mm:ss[.fff]
tanggal .
Contoh berikut dapat dijalankan di SQL Editor Kueri, SQL Server Management Studio (SSMS), Azure Data Studio, atau editor kueri T-SQL apa pun.
Catatan
Saat ini, hanya zona waktu Waktu Universal Terkoordinasi (UTC) yang digunakan untuk perjalanan waktu.
Perjalanan waktu di meja gudang
Contoh ini menunjukkan cara melakukan perjalanan waktu pada tabel individual di gudang.
Klausa T-SQL OPTION menentukan titik waktu untuk mengembalikan data.
/* Time travel using a SELECT statement */
SELECT *
FROM [dbo].[dimension_customer]
OPTION (FOR TIMESTAMP AS OF '2024-05-02T20:44:13.700');
Perjalanan waktu di beberapa tabel gudang
Klausul OPTION dideklarasikan sekali per kueri, dan hasil kueri akan mencerminkan status data pada tanda waktu yang ditentukan dalam kueri untuk semua tabel.
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');
Perjalanan waktu dalam prosedur tersimpan
Prosedur tersimpan adalah sekumpulan pernyataan SQL yang telah dikommpilasikan sebelumnya dan disimpan sehingga dapat digunakan berulang kali. Klausa OPTION dapat dideklarasikan sekali dalam prosedur tersimpan, dan kumpulan hasil mencerminkan status semua tabel pada tanda waktu yang ditentukan.
Klausa FOR TIMESTAMP AS OF
tidak dapat langsung menerima variabel, karena nilai dalam klausul ini OPTION
harus deterministik. Anda dapat menggunakan sp_executesql untuk meneruskan nilai tanggalwaktu yang ditik dengan kuat ke prosedur tersimpan. Contoh sederhana ini meneruskan variabel dan mengonversi parameter tanggalwaktu ke format yang diperlukan dengan gaya tanggal 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
Kemudian, Anda dapat memanggil prosedur tersimpan dan meneruskan variabel sebagai parameter yang sangat ditik. Contohnya:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = '2024-05-10T22:56:15.457';
EXEC dbo.sales_by_city @pointInTime;
Atau, misalnya:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = DATEADD(dd, -7, GETDATE())
EXEC dbo.sales_by_city @pointInTime;
Perjalanan waktu dalam tampilan
Tampilan mewakili kueri tersimpan yang secara dinamis mengambil data dari satu atau beberapa tabel setiap kali tampilan dikueri. Klausa OPTION dapat digunakan untuk mengkueri tampilan sehingga hasilnya mencerminkan status data pada tanda waktu yang ditentukan dalam kueri.
--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');
Namun, Anda tidak dapat mengkueri data sebelumnya dari tabel dalam tampilan sebelum tampilan dibuat.
Batasan
Untuk informasi selengkapnya tentang perjalanan waktu pada batasan tingkat pernyataan dengan FOR TIMESTAMP AS OF
, lihat Batasan perjalanan waktu.