Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:Azure SQL Database
Azure SQL Managed Instance
SQL-adatbázis a Fabricben
Az időbeli táblák olyan programozhatósági funkciók, amelyek lehetővé teszik az adatok változásainak teljes előzményeinek nyomon követését és elemzését anélkül, hogy egyéni kódolásra van szükség. Az időbeli táblák szorosan kapcsolódnak az időkörnyezethez, így a tárolt tények csak az adott időszakon belül értelmezhetők érvényesként. Az időbeli táblák ezen tulajdonsága lehetővé teszi a hatékony időalapú elemzést és az adatfejlődésből származó megállapítások lekérését.
Időbeli forgatókönyv
Ez a cikk az időbeli táblák alkalmazásforgatókönyvekben való felhasználásának lépéseit mutatja be. Tegyük fel, hogy egy teljesen új webhelyen vagy egy meglévő webhelyen szeretné nyomon követni a felhasználói tevékenységet, amelyet ki szeretne terjeszteni a felhasználói tevékenységelemzéssel. Ebben az egyszerűsített példában feltételezzük, hogy a meglátogatott weblapok száma egy adott időszakban egy olyan mutató, amelyet rögzíteni és figyelni kell az Azure SQL Database-ben vagy felügyelt Azure SQL-példányon üzemeltetett webhelyadatbázisban. A felhasználói tevékenység történeti elemzésének célja, hogy bemeneteket kapjon a webhely újratervezéséhez, és jobb élményt nyújtson a látogatók számára.
A forgatókönyv adatbázismodellje egyszerű : a felhasználói tevékenység metrikája egyetlen egész számmezővel ( PageVisited) van ábrázolva, és a felhasználói profil alapvető adataival együtt lesz rögzítve. Emellett az időalapú elemzéshez minden felhasználóhoz sorokat kell tartania, ahol minden sor az adott felhasználó által egy adott időtartamon belül meglátogatott oldalak számát jelöli.
Szerencsére nem kell semmilyen erőfeszítést tennie az alkalmazásban, hogy megőrizze ezeket a tevékenységadatokat. A temporális táblákkal ez a folyamat automatizált , így teljes rugalmasságot biztosít a webhely tervezése során, és több időt biztosít arra, hogy magára az adatelemzésre összpontosítson. Az egyetlen teendője annak biztosítása, hogy WebSiteInfo a tábla temporális rendszerverzióként legyen konfigurálva. Az időbeli táblák ebben a forgatókönyvben való felhasználásának pontos lépéseit az alábbiakban ismertetjük.
1. lépés: Táblák konfigurálása időlegesként
Attól függően, hogy új fejlesztést vagy meglévő alkalmazást frissít, ideiglenes táblákat hozhat létre, vagy ideiglenes attribútumok hozzáadásával módosíthatja a meglévőket. Általánosságban elmondható, hogy a forgatókönyv a két lehetőség kombinációját jelentheti. Hajtsa végre ezeket a műveletet az SQL Server Management Studio (SSMS), az SQL Server Data Tools (SSDT), a Visual Studio Codemssql-bővítménye vagy bármely más Transact-SQL fejlesztőeszköz használatával.
Important
Mindig az SQL Server Management Studio legújabb verzióját használja.
Új tábla létrehozása
Az SSMS Object Explorer Új System-Versioned tábla helyi menüelemével nyissa meg a lekérdezésszerkesztőt egy ideiglenes táblasablonszkripttel, majd a sablon kitöltéséhez használja az Értékek megadása sablonparaméterekhez (Ctrl+Shift+M) parancsot:
Az SSDT-ben válassza a "Temporális tábla (System-Versioned)" sablont, amikor új elemeket ad hozzá az adatbázisprojekthez. Ez megnyitja a táblatervezőt, és lehetővé teszi a táblázat elrendezésének egyszerű megadását:
A temporális táblát úgy is létrehozhatja, hogy közvetlenül megadja a Transact-SQL utasításokat, ahogyan az alábbi példában látható. Minden temporális tábla kötelező elemei a
PERIODdefiníció és aSYSTEM_VERSIONINGzáradék egy másik felhasználói táblára való hivatkozással, amely előzménysor-verziókat fog tárolni:CREATE TABLE WebsiteUserInfo ( [UserID] int NOT NULL PRIMARY KEY CLUSTERED , [UserName] nvarchar(100) NOT NULL , [PagesVisited] int NOT NULL , [ValidFrom] datetime2 (0) GENERATED ALWAYS AS ROW START , [ValidTo] datetime2 (0) GENERATED ALWAYS AS ROW END , PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo) ) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.WebsiteUserInfoHistory));
Alapértelmezett előzménytábla
Rendszerverziójú temporális tábla létrehozásakor a rendszer automatikusan létrehozza a kísérő előzménytáblát az alapértelmezett konfigurációval. Az alapértelmezett előzménytábla egy fürtözött B-fa indexet tartalmaz az időszakoszlopokon (befejezés, kezdés) az oldaltömörítés engedélyezésével. Ez a konfiguráció optimális a legtöbb olyan forgatókönyv esetében, amelyben időbeli táblákat használnak, különösen az adatnaplózáshoz.
Ebben a konkrét esetben egy hosszabb adatelőzmények és nagyobb adatkészletek esetében szeretnénk időalapú trendelemzést végezni, így az előzménytáblához választott tárolási lehetőség egy csoportosított oszlopcentrikus index. A fürtözött oszloptárak jó tömörítést és teljesítményt biztosítanak az elemzési lekérdezésekhez. A temporális táblák rugalmasan konfigurálják az aktuális és az időbeli táblák indexeit teljesen függetlenül.
Note
Az oszlopalapú indexek az üzletileg kritikus, az általános célú és a prémium szinteken, valamint a standard S3-as és magasabb szinteken érhetők el.
Az alábbi szkript bemutatja, hogyan módosítható az előzmények táblázatának alapértelmezett indexe a fürtözött oszloptárra:
CREATE CLUSTERED COLUMNSTORE INDEX IX_WebsiteUserInfoHistory
ON dbo.WebsiteUserInfoHistory
WITH (DROP_EXISTING = ON);
A temporális táblák az Objektumkezelőben jelennek meg az adott ikonnal a könnyebb azonosítás érdekében, míg az előzménytáblája gyermekcsomópontként jelenik meg.
Meglévő tábla módosítása időbelire
Vegyük sorra azt az alternatív forgatókönyvet, amelyben a WebsiteUserInfo tábla már létezik, de nem úgy lett kialakítva, hogy megőrizze a változások előzményeit. Ebben az esetben egyszerűen kiterjesztheti a meglévő táblát időlegessé, ahogyan az alábbi példában látható:
ALTER TABLE WebsiteUserInfo
ADD
ValidFrom datetime2 (0) GENERATED ALWAYS AS ROW START HIDDEN
constraint DF_ValidFrom DEFAULT DATEADD(SECOND, -1, SYSUTCDATETIME())
, ValidTo datetime2 (0) GENERATED ALWAYS AS ROW END HIDDEN
constraint DF_ValidTo DEFAULT '9999.12.31 23:59:59.99'
, PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo);
ALTER TABLE WebsiteUserInfo
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.WebsiteUserInfoHistory));
GO
CREATE CLUSTERED COLUMNSTORE INDEX IX_WebsiteUserInfoHistory
ON dbo.WebsiteUserInfoHistory
WITH (DROP_EXISTING = ON);
2. lépés: A számítási feladat rendszeres futtatása
A temporális táblák fő előnye, hogy nem kell módosítania vagy beállítania a webhelyét semmilyen módon a változáskövetés elvégzéséhez. A létrehozás után az időbeli táblák transzparensen megőrzik a korábbi sorverziókat minden alkalommal, amikor módosításokat végez az adatokon.
Ahhoz, hogy automatikus változáskövetést használhassunk ehhez az esethez, frissítsük az oszlopot PagesVisited minden alkalommal, amikor egy felhasználó befejezi a munkamenetet a webhelyen:
UPDATE WebsiteUserInfo SET [PagesVisited] = 5
WHERE [UserID] = 1;
Fontos megfigyelni, hogy a frissítési lekérdezésnek nem kell tudnia, hogy pontosan mikor történt a tényleges művelet, és hogy az előzményadatok hogyan lesznek megőrizve a jövőbeli elemzéshez. A rendszer mindkét szempontot automatikusan kezeli. Az alábbi ábra bemutatja, hogyan jönnek létre az előzményadatok minden frissítés során.
3. lépés: Előzményadatok elemzése
Amikor az időbeli rendszer-verziózás engedélyezve van, az előzményadatok elemzése csak egy lekérdezéssel elérhető az ön számára. Ebben a cikkben bemutatunk néhány példát a gyakori elemzési forgatókönyvekre – az összes részlet megismeréséhez, a FOR SYSTEM_TIME záradékkal bevezetett különféle lehetőségek megismeréséhez.
Az egy órával ezelőtti látogatott weblapok száma alapján rendezett 10 felhasználó megtekintéséhez futtassa ezt a lekérdezést:
DECLARE @hourAgo datetime2 = DATEADD(HOUR, -1, SYSUTCDATETIME());
SELECT TOP 10 * FROM dbo.WebsiteUserInfo FOR SYSTEM_TIME AS OF @hourAgo
ORDER BY PagesVisited DESC
Ezt a lekérdezést egyszerűen módosíthatja úgy, hogy elemezze a webhelylátogatásokat egy nappal ezelőtt, egy hónappal ezelőtt vagy a múlt bármely pontján.
Az előző napi alapszintű statisztikai elemzéshez használja a következő példát:
DECLARE @twoDaysAgo datetime2 = DATEADD(DAY, -2, SYSUTCDATETIME());
DECLARE @aDayAgo datetime2 = DATEADD(DAY, -1, SYSUTCDATETIME());
SELECT UserID, SUM (PagesVisited) as TotalVisitedPages, AVG (PagesVisited) as AverageVisitedPages,
MAX (PagesVisited) AS MaxVisitedPages, MIN (PagesVisited) AS MinVisitedPages,
STDEV (PagesVisited) as StDevVisitedPages
FROM dbo.WebsiteUserInfo
FOR SYSTEM_TIME BETWEEN @twoDaysAgo AND @aDayAgo
GROUP BY UserId
Egy adott felhasználó tevékenységeinek kereséséhez egy adott időszakon belül használja a CONTAINED IN záradékot:
DECLARE @hourAgo datetime2 = DATEADD(HOUR, -1, SYSUTCDATETIME());
DECLARE @twoHoursAgo datetime2 = DATEADD(HOUR, -2, SYSUTCDATETIME());
SELECT * FROM dbo.WebsiteUserInfo
FOR SYSTEM_TIME CONTAINED IN (@twoHoursAgo, @hourAgo)
WHERE [UserID] = 1;
A grafikus vizualizáció különösen kényelmes az időbeli lekérdezésekhez, mivel intuitív módon jelenítheti meg a trendeket és a használati mintákat:
Táblázatséma fejlesztése
Az alkalmazásfejlesztés során általában módosítania kell a temporális táblázat sémáját. Ehhez egyszerűen futtassa a normál ALTER TABLE utasításokat, és az Azure SQL Database vagy az Azure SQL Managed Instance megfelelően propagálja a módosításokat az előzménytáblában.
Az alábbi szkript bemutatja, hogyan adhat hozzá további attribútumokat a nyomon követéshez:
/*Add new column for tracking source IP address*/
ALTER TABLE dbo.WebsiteUserInfo
ADD [IPAddress] varchar(128) NOT NULL CONSTRAINT DF_Address DEFAULT 'N/A';
Hasonlóképpen módosíthatja az oszlopdefiníciót, amíg a számítási feladat aktív:
/*Increase the length of name column*/
ALTER TABLE dbo.WebsiteUserInfo
ALTER COLUMN UserName nvarchar(256) NOT NULL;
Végül eltávolíthat egy olyan oszlopot, amelyekre már nincs szüksége.
/*Drop unnecessary column */
ALTER TABLE dbo.WebsiteUserInfo
DROP COLUMN TemporaryColumn;
Másik lehetőségként a legújabb SSDT használatával módosíthatja a temporális táblák sémáját az adatbázisban (online mód) vagy az adatbázisprojekt keretében (offline mód).
Az előzményadatok megőrzésének szabályozása
A rendszer által verziózott temporális táblák esetében az előzménytábla növelheti az adatbázis méretét a normál tábláknál. A nagy méretű és egyre növekvő előzménytáblák a tiszta tárolási költségek, valamint az időbeli lekérdezések teljesítményadója miatt is problémát jelenthetnek. Ezért az előzménytáblában lévő adatok kezelésére szolgáló adatmegőrzési szabályzat kialakítása fontos szempont minden időbeli tábla életciklusának tervezésében és kezelésében. Vegye figyelembe az előzményadatok időbeli táblában való kezelésére vonatkozó alábbi módszereket:
Remarks
A Fabric- és Fabric SQL-adatbázisbavaló tükrözéshez konfigurált Azure SQL Database-ben is létrehozhat időbeli táblákat, de a megfelelő előzménytáblák nem lesznek tükrözve a Fabric OneLake-hez. A jelölő időbeli táblákon való beállításával SYSTEM_VERSIONING kapcsolatos konkrét viselkedésért lásd: Rendszerverziójú temporális tábla létrehozása.