Σημείωμα
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να εισέλθετε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Ισχύει για:✅ Τελικό σημείο ανάλυσης SQL και Αποθήκη στο Microsoft Fabric
Στο Microsoft Fabric, η δυνατότητα time travel ξεκλειδώνει τη δυνατότητα αναζήτησης των προηγούμενων εκδόσεων δεδομένων χωρίς την ανάγκη δημιουργίας πολλαπλών αντιγράφων δεδομένων, εξοικονομώντας κόστος αποθήκευσης. Αυτό το άρθρο περιγράφει τον τρόπο υποβολής ερωτημάτων σε πίνακες αποθήκης χρησιμοποιώντας χρονική διαδρομή σε επίπεδο δήλωσης, χρησιμοποιώντας τον όρο ΕΠΙΛΟΓΗ T-SQL και τη σύνταξη FOR TIMESTAMP AS OF .
Τα ακόλουθα παραδείγματα μπορούν να εκτελεστούν στα SQL πρόγραμμα επεξεργασίας Power Query, SQL Server Management Studio (SSMS), την επέκταση MSSQL για Visual Studio Code ή οποιαδήποτε query editor T-SQL.
Σημείωμα
Προς το παρόν, μόνο η ζώνη ώρας Συντονισμένη παγκόσμια ώρα (UTC) χρησιμοποιείται για ταξίδι στο χρόνο.
Ταξίδι χρόνου σε έναν πίνακα αποθήκης
Αυτό το παράδειγμα δείχνει πώς μπορείτε να ταξιδέψετε χρόνο σε έναν μεμονωμένο πίνακα στην αποθήκη.
Ο όρος OPTION T-SQL καθορίζει το χρονικό σημείο για την επιστροφή των δεδομένων. Ο OPTION όρος χρησιμοποιεί τη μορφή ημερομηνίας yyyy-MM-ddTHH:mm:ss[.fff].
/* 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 για να μεταβιβάσετε μια έντονα πληκτρολογημένη τιμή ημερομηνίας/ώρας στην αποθηκευμένη διαδικασία. Αυτό το απλό παράδειγμα μεταβιβάζει μια μεταβλητή και μετατρέπει την παράμετρο ημερομηνίας/ώρας στην απαραίτητη μορφή με στυλ ημερομηνίας 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
Ισχύει για: Μόνο αποθήκη
Στην Fabric αποθήκη δεδομένων, η γλώσσα χειρισμού δεδομένων (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το , ανατρέξτε στην ενότητα Περιορισμοί χρονοταξιδιού.