วิธีการ: สอบถามโดยใช้เวลาในการเดินทางไปที่ระดับใบแจ้งยอด

ใน Microsoft Fabric ความสามารถในการ เดินทาง ในเวลาจะปลดล็อกความสามารถในการคิวรีข้อมูลเวอร์ชันก่อนหน้าโดยไม่จําเป็นต้องสร้างสําเนาข้อมูลหลายฉบับ ซึ่งประหยัดค่าใช้จ่ายในการจัดเก็บข้อมูล บทความนี้อธิบายวิธีการคิวรีตารางคลังโดยใช้การเดินทางเวลาในระดับคําสั่ง โดยใช้ส่วนคําสั่ง T-SQL OPTION และไวยากรณ์ FOR TIMESTAMP AS OF ขณะนี้ คุณลักษณะนี้อยู่ในการการแสดงตัวอย่าง

ตารางคลังสินค้าสามารถสอบถามถึงระยะเวลาการเก็บรักษาของวันปฏิทินสามสิบวันได้โดยใช้ OPTION คําสั่ง ที่ระบุรูปแบบ yyyy-MM-ddTHH:mm:ss[.fff]วันที่

ตัวอย่างต่อไปนี้สามารถดําเนินการได้ใน SQL ตัวแก้ไขคิวรี, SQL Server Management Studio (SSMS), Azure Data Studio หรือตัวแก้ไขคิวรี T-SQL ใด ๆ

หมายเหตุ

ในปัจจุบัน เฉพาะโซนเวลามาตรฐานสากล (UTC) เท่านั้นที่จะใช้สําหรับการเดินทางเวลา

การเดินทางเวลาในตารางคลังสินค้า

ตัวอย่างนี้แสดงวิธีการเดินทางตามเวลาของแต่ละตารางในคลังสินค้า

ส่วนคําสั่ง T-SQL ของ OPTION ระบุจุดในเวลาที่จะส่งกลับข้อมูล

/* 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'); 
  • ข้อมูลในอดีตจากตารางในมุมมองสามารถคิวรีสําหรับการเดินทางในเวลาที่เริ่มต้นจากเวลาที่มีการสร้างมุมมองได้เท่านั้น
  • หลังจากที่มีการเปลี่ยนแปลงมุมมอง การสืบค้นเพื่อเดินทางเวลาจะใช้ได้หลังจากที่มีการเปลี่ยนแปลงเท่านั้น
  • ถ้าตารางพื้นฐานของมุมมองมีการเปลี่ยนแปลงโดยไม่เปลี่ยนแปลงมุมมอง แบบสอบถามการเดินทางเวลาในมุมมองสามารถส่งกลับข้อมูลจาก ก่อนเปลี่ยนตาราง ตามที่คาดไว้
  • เมื่อตารางพื้นฐานของมุมมองถูกปล่อยและสร้างขึ้นใหม่โดยไม่มีการปรับเปลี่ยนมุมมอง ข้อมูลสําหรับคิวรีการเดินทางเวลาจะพร้อมใช้งานเฉพาะจากเวลาหลังจากที่ตารางถูกสร้างขึ้นใหม่

ข้อจำกัด

สําหรับข้อมูลเพิ่มเติมเกี่ยวกับการเดินทางในเวลาที่ข้อจํากัดระดับใบแจ้งยอดด้วย FOR TIMESTAMP AS OFโปรดดู ข้อจํากัดการเดินทางเวลา