Κοινή χρήση μέσω


Τρόπος: Υποβολή ερωτήματος με χρήση χρονικού ταξιδιού σε επίπεδο πρότασης

Στο Microsoft Fabric, η δυνατότητα ταξιδιού στον χρόνο ξεκλειδώνει τη δυνατότητα υποβολής ερωτημάτων για προηγούμενες εκδόσεις δεδομένων χωρίς την ανάγκη δημιουργίας πολλών αντιγράφων δεδομένων, εξοικονομώντας κόστος αποθήκευσης. Αυτό το άρθρο περιγράφει τον τρόπο υποβολής ερωτημάτων σε πίνακες αποθήκης με χρήση του ταξιδιού χρόνου σε επίπεδο πρότασης, χρησιμοποιώντας τον όρο T-SQL OPTION και τη σύνταξη FOR TIMESTAMP AS OF. Αυτή η δυνατότητα είναι διαθέσιμη επί του παρόντος σε προεπισκόπηση.

Είναι δυνατή η υποβολή ερωτημάτων σε πίνακες αποθήκης μέχρι μια περίοδο διατήρησης 30 ημερολογιακών ημερών, χρησιμοποιώντας τον OPTION όρο , παρέχοντας τη μορφή yyyy-MM-ddTHH:mm:ss[.fff]ημερομηνίας .

Τα παρακάτω παραδείγματα μπορούν να εκτελεστούν στο Πρόγραμμα επεξεργασίας SQL Query, στο SQL Server Management Studio (SSMS), στο Azure Data Studio ή σε οποιοδήποτε πρόγραμμα επεξεργασίας ερωτημάτων 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 για να μεταβιβάσετε μια τιμή ημερομηνίας/ώρας που έχει πληκτρολογηθεί έντονα στην αποθηκευμένη διαδικασία. Αυτό το απλό παράδειγμα διαβιβάζει μια μεταβλητή και μετατρέπει την παράμετρο ημερομηνίας/ώρας στην απαραίτητη μορφή με το στυλ ημερομηνίας 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το , ανατρέξτε στο θέμα Περιορισμοί ταξιδιού στο χρόνο.