Jaa


Toimintatapa: Kysely, joka käyttää aikasijainnin lauseketasolla

Microsoft Fabricissa aikamatkustusominaisuus vapauttaa mahdollisuuden suorittaa kyselyjä tietojen aiemmista versioista ilman tarvetta luoda useita tietojen kopioita, mikä säästää tallennuskustannuksissa. Tässä artikkelissa kuvataan, miten varastotaulukoiden kyselyt voidaan tehdä käyttämällä aikasijainnin lausetasolla käyttämällä T-SQL OPTION -lausetta ja FOR TIMESTAMP AS OF -syntaksia. Tämä ominaisuus on käytettävissä vain esiversiona.

Varastotaulukoille voidaan tehdä kyselyjä enintään 30 kalenteripäivän säilytysajankohtaan asti käyttämällä - OPTION lausetta, joka antaa päivämäärämuodon yyyy-MM-ddTHH:mm:ss[.fff].

Seuraavat esimerkit voidaan suorittaa SQL Query -editorissa, SQL Server Management Studiossa (SSMS), Azure Data Studio tai missä tahansa T-SQL-kyselyeditorissa.

Muistiinpano

Tällä hetkellä aikamatkailuun käytetään vain UTC-aikavyöhykettä (Coordinated Universal Time).

Aikasijainnit varastotaulukossa

Tässä esimerkissä näytetään, miten aikasijainti tapahtuu varastossa olevassa yksittäisessä taulukossa.

OPTION T-SQL -lause määrittää tietojen palauttamisen ajankohdan.

/* Time travel using a SELECT statement */
SELECT *
FROM [dbo].[dimension_customer]
OPTION (FOR TIMESTAMP AS OF '2024-05-02T20:44:13.700');

Useiden varastotaulukoiden aikasijainnit

OPTION-lause on esitelty kerran kyselyä kohden, ja kyselyn tulokset vastaavat tietojen tilaa kyselyssä määritetyn aikaleiman aikana kaikille taulukoille.

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');

Aikamatkustus tallennetussa toimintosarjassa

Tallennetut toimintosarjat ovat joukko SQL-lausekkeita, jotka on esivalmistettu ja tallennettu siten, että niitä voidaan käyttää toistuvasti. OPTION-lause voidaan määrittää kerran tallennetussa toimintosarjassa, ja tulosjoukko kuvastaa kaikkien taulukoiden tilaa määritetyn aikaleiman aikana.

-lause FOR TIMESTAMP AS OF ei voi suoraan hyväksyä muuttujaa, koska tämän OPTION lauseen arvojen on oltava deterministisiä. sp_executesql avulla voit välittää vahvasti kirjoitetun datetime-arvon tallennettuun toimintosarjaan. Tämä yksinkertainen esimerkki välittää muuttujan ja muuntaa datetime-parametrin tarvittavaan muotoon päivämäärätyylillä 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

Sen jälkeen voit kutsua tallennettua toimintosarjaa ja välittää muuttujan vahvasti kirjoitettuna parametrina. Esimerkkejä:

--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = '2024-05-10T22:56:15.457';
EXEC dbo.sales_by_city @pointInTime;

Tai esimerkiksi:

--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = DATEADD(dd, -7, GETDATE())
EXEC dbo.sales_by_city @pointInTime;

Aikamatka näkymässä

Näkymät edustavat tallennettua kyselyä, joka noutaa tietoja dynaamisesti yhdestä tai useammasta taulukosta aina, kun näkymään tehdään kysely. OPTION-lausetta voidaan käyttää kyselyjen tekemisessä näkymissä niin, että tulokset vastaavat tietojen tilaa kyselyssä määritetyn aikaleiman aikana.

--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'); 
  • Näkymän taulukoiden historiallisista tiedoista voidaan tehdä kyselyjä vain aikasijainnin osalta, joka alkaa näkymän luontihetkestä.
  • Kun näkymää on muutettu, aikamatkustuskyselyt ovat voimassa vasta sen jälkeen, kun sitä on muutettu.
  • Jos näkymän pohjana olevaa taulukkoa muutetaan näkymää muuttamatta, näkymän aikamatkustuskyselyt voivat palauttaa tiedot ennen taulukon muutosta odotetulla tavalla.
  • Kun näkymän pohjana oleva taulukko pudotetaan ja luodaan uudelleen muokkaamatta näkymää, aikamatkustuskyselyiden tiedot ovat käytettävissä vain siitä ajasta, kun taulukko on luotu uudelleen.

Rajoitukset

Lisätietoja aikamatkailusta on kohdassa Aikamatkan rajoitukset kohdassa Lauseketason rajoitukset.FOR TIMESTAMP AS OF