Jelentéskészítés vertikálisan felskálázott felhőalapú adatbázisokban (előzetes verzió)
A következőre vonatkozik: Azure SQL Database
A horizontálisan elosztott adatbázisok sorokat osztanak el egy horizontálisan felskálázott adatszinten. A séma minden résztvevő adatbázisban azonos, más néven horizontális particionálás. Rugalmas lekérdezéssel olyan jelentéseket hozhat létre, amelyek egy szegmenses adatbázis összes adatbázisára kiterjednek.
Rövid útmutató : Jelentéskészítés vertikálisan felskálázott felhőbeli adatbázisokban.
Nem horizontális adatbázisok esetén lásd a különböző sémákkal rendelkező felhőbeli adatbázisok lekérdezését.
Előfeltételek
- Szegmenstérkép létrehozása a rugalmas adatbázis-ügyfélkódtár használatával. lásd: Szegmenstérkép-kezelés. Vagy használja a mintaalkalmazást a rugalmas adatbázis-eszközök használatának első lépéseiben.
- Másik lehetőségként tekintse meg a meglévő adatbázisok migrálását kibővített adatbázisokká.
- A felhasználónak bármilyen külső adatforrás engedélyével kell rendelkeznie. Ez az engedély az ALTER DATABASE engedély részét képezi.
- A mögöttes adatforrásra való hivatkozáshoz BÁRMILYEN KÜLSŐ ADATFORRÁS-engedély módosítása szükséges.
Áttekintés
Ezek az utasítások a rugalmas lekérdezési adatbázisban hozzák létre a horizontális adatréteg metaadat-ábrázolását.
- MESTERKULCS LÉTREHOZÁSA
- CREATE DATABASE SCOPED CREDENTIAL
- CREATE EXTERNAL DATA SOURCE
- KÜLSŐ TÁBLA LÉTREHOZÁSA
1.1 Adatbázis-hatókörű főkulcs és hitelesítő adatok létrehozása
A hitelesítő adatokat a rugalmas lekérdezés használja a távoli adatbázisokhoz való csatlakozáshoz.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
CREATE DATABASE SCOPED CREDENTIAL [<credential_name>] WITH IDENTITY = '<username>',
SECRET = '<password>';
Megjegyzés:
Győződjön meg arról, hogy a "<felhasználónév>" nem tartalmaz "@servername" utótagot.
1.2 Külső adatforrások létrehozása
Szintaxis:
<External_Data_Source> ::=
CREATE EXTERNAL DATA SOURCE <data_source_name> WITH
(TYPE = SHARD_MAP_MANAGER,
LOCATION = '<fully_qualified_server_name>',
DATABASE_NAME = '<shardmap_database_name>',
CREDENTIAL = <credential_name>,
SHARD_MAP_NAME = '<shardmapname>'
) [;]
Példa
CREATE EXTERNAL DATA SOURCE MyExtSrc
WITH
(
TYPE=SHARD_MAP_MANAGER,
LOCATION='myserver.database.windows.net',
DATABASE_NAME='ShardMapDatabase',
CREDENTIAL= SMMUser,
SHARD_MAP_NAME='ShardMap'
);
Az aktuális külső adatforrások listájának lekérése:
select * from sys.external_data_sources;
A külső adatforrás a szegmenstérképre hivatkozik. Egy rugalmas lekérdezés ezután a külső adatforrást és a mögöttes szegmenstérképet használja az adatrétegben részt vevő adatbázisok számbavételéhez. A rendszer ugyanazokat a hitelesítő adatokat használja a szegmenstérkép olvasásához és a szegmensek adatainak eléréséhez egy rugalmas lekérdezés feldolgozása során.
1.3 Külső táblák létrehozása
Szintaxis:
CREATE EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ] table_name
( { <column_definition> } [ ,...n ])
{ WITH ( <sharded_external_table_options> ) }
) [;]
<sharded_external_table_options> ::=
DATA_SOURCE = <External_Data_Source>,
[ SCHEMA_NAME = N'nonescaped_schema_name',]
[ OBJECT_NAME = N'nonescaped_object_name',]
DISTRIBUTION = SHARDED(<sharding_column_name>) | REPLICATED |ROUND_ROBIN
Példa
CREATE EXTERNAL TABLE [dbo].[order_line](
[ol_o_id] int NOT NULL,
[ol_d_id] tinyint NOT NULL,
[ol_w_id] int NOT NULL,
[ol_number] tinyint NOT NULL,
[ol_i_id] int NOT NULL,
[ol_delivery_d] datetime NOT NULL,
[ol_amount] smallmoney NOT NULL,
[ol_supply_w_id] int NOT NULL,
[ol_quantity] smallint NOT NULL,
[ol_dist_info] char(24) NOT NULL
)
WITH
(
DATA_SOURCE = MyExtSrc,
SCHEMA_NAME = 'orders',
OBJECT_NAME = 'order_details',
DISTRIBUTION=SHARDED(ol_w_id)
);
A külső táblák listájának lekérése az aktuális adatbázisból:
SELECT * from sys.external_tables;
Külső táblák elvetése:
DROP EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ] table_name[;]
Megjegyzések
A DATA_SOURCE záradék a külső táblához használt külső adatforrást (szegmenstérképet) határozza meg.
A SCHEMA_NAME és OBJECT_NAME záradékok a külső tábladefiníciót egy másik sémában lévő táblára képezik le. Ha nincs megadva, a távoli objektum sémája feltételezve van dbo
, és a rendszer feltételezi, hogy a neve megegyezik a definiált külső tábla nevével. Ez akkor hasznos, ha a távoli tábla neve már szerepel abban az adatbázisban, ahol létre szeretné hozni a külső táblát. Például egy külső táblát szeretne definiálni a katalógusnézetek vagy DMV-k összesített nézetének lekéréséhez a kibővített adatszinten. Mivel a katalógusnézetek és a DMV-k már léteznek helyileg, nem használhatja a nevüket a külső tábladefinícióhoz. Ehelyett használjon másik nevet, és használja a katalógusnézet vagy a DMV nevét a SCHEMA_NAME és/vagy OBJECT_NAME záradékokban. (Lásd az alábbi példát.)
A ELOSZLÁS záradék a tábla adateloszlását határozza meg. A lekérdezésfeldolgozó a DISTRIBUTION záradékban megadott információkat használja a leghatékonyabb lekérdezési tervek létrehozásához.
- A szegmenses skálázás azt jelenti, hogy az adatok horizontálisan particionálva lesznek az adatbázisok között. Az adatterjesztés particionálási kulcsa a <sharding_column_name> paraméter.
- A REPLIKÁLT érték azt jelenti, hogy a tábla azonos példányai minden adatbázisban megtalálhatók. Az Ön felelőssége, hogy a replikák azonosak legyenek az adatbázisokban.
- ROUND_ROBIN azt jelenti, hogy a tábla horizontálisan particionálása alkalmazásfüggő terjesztési módszerrel történik.
Adatréteg-referencia: A külső tábla DDL-jének külső adatforrásra kell hivatkoznia. A külső adatforrás egy szegmenstérképet ad meg, amely biztosítja a külső táblának az adatrétegben lévő összes adatbázis megkereséséhez szükséges információkat.
Biztonsági szempontok
A külső táblához hozzáféréssel rendelkező felhasználók automatikusan hozzáférnek az alapul szolgáló távoli táblákhoz a külső adatforrás definíciójában megadott hitelesítő adatok alapján. Kerülje a jogosultságok nem kívánt megemelését a külső adatforrás hitelesítő adataival. Külső tábla esetén használja a GRANT vagy a REVOKE parancsot, mintha normál tábla lenne.
Miután definiálta a külső adatforrást és a külső táblákat, mostantól teljes T-SQL-t használhat a külső táblákon.
Példa: horizontális particionált adatbázisok lekérdezése
Az alábbi lekérdezés háromirányú illesztéseket hajt végre a raktárak, rendelések és rendeléssorok között, és több összesítést és szelektív szűrőt használ. Feltételezi, hogy (1) horizontális particionálás (horizontális particionálás) és (2) a raktárak, rendelések és rendeléssorok skálázva vannak a raktárazonosító oszlopban, és hogy a rugalmas lekérdezés együtt tudja megtalálni a szegmenseken lévő illesztéseket, és párhuzamosan feldolgozhatja a lekérdezés drága részét a szegmenseken.
select
w_id as warehouse,
o_c_id as customer,
count(*) as cnt_orderline,
max(ol_quantity) as max_quantity,
avg(ol_amount) as avg_amount,
min(ol_delivery_d) as min_deliv_date
from warehouse
join orders
on w_id = o_w_id
join order_line
on o_id = ol_o_id and o_w_id = ol_w_id
where w_id > 100 and w_id < 200
group by w_id, o_c_id
Tárolt eljárás távoli T-SQL-végrehajtáshoz: sp_execute_remote
A rugalmas lekérdezés egy tárolt eljárást is bevezet, amely közvetlen hozzáférést biztosít a szegmensekhez. A tárolt eljárás neve sp_execute _remote , és távoli tárolt eljárások vagy T-SQL-kód távoli adatbázisokon való végrehajtására használható. A következő paramétereket veszi igénybe:
- Adatforrás neve (nvarchar): Az RDBMS típusú külső adatforrás neve.
- Lekérdezés (nvarchar): Az egyes szegmenseken végrehajtandó T-SQL-lekérdezés.
- Paraméterdeklaráció (nvarchar) – nem kötelező: A Lekérdezés paraméterben (például sp_executesql) használt paraméterek adattípus-definícióival rendelkező sztring.
- Paraméterértékek listája – nem kötelező: Paraméterértékek vesszővel tagolt listája (például sp_executesql).
A sp_execute_remote a meghívási paraméterekben megadott külső adatforrást használja a megadott T-SQL-utasítás távoli adatbázisokon való végrehajtásához. A külső adatforrás hitelesítő adatait használja a shardmap manager-adatbázishoz és a távoli adatbázisokhoz való csatlakozáshoz.
Példa:
EXEC sp_execute_remote
N'MyExtSrc',
N'select count(w_id) as foo from warehouse'
Eszközök csatlakoztatása
Az alkalmazás, a BI és az adatintegrációs eszközök az adatbázishoz való csatlakoztatásához használjon rendszeres SQL Server-kapcsolati sztringeket a külső tábladefiníciókkal. Győződjön meg arról, hogy az SQL Server támogatott az eszköz adatforrásaként. Ezután hivatkozzon a rugalmas lekérdezési adatbázisra, mint bármely más, az eszközhöz csatlakoztatott SQL Server-adatbázisra, és használjon külső táblákat az eszközről vagy alkalmazásból, mintha helyi táblák lennének.
Ajánlott eljárások
- Győződjön meg arról, hogy a rugalmas lekérdezési végpont adatbázisa hozzáférést kapott a szegmenstérkép-adatbázishoz és az összes szegmenshez az SQL Database tűzfalain keresztül.
- Ellenőrizze vagy érvényesítse a külső tábla által meghatározott adatelosztást. Ha a tényleges adateloszlás eltér a tábladefinícióban megadott eloszlástól, a lekérdezések váratlan eredményeket eredményezhetnek.
- A rugalmas lekérdezés jelenleg nem hajtja végre a szegmensek eltávolítását, ha a szegmenskulcsra vonatkozó predikátumok lehetővé teszik bizonyos szegmensek biztonságos kizárását a feldolgozásból.
- A rugalmas lekérdezés olyan lekérdezésekhez működik a legjobban, ahol a számítások nagy része elvégezhető a szegmenseken. Általában a legjobb lekérdezési teljesítményt kapja szelektív szűrő predikátumokkal, amelyek kiértékelhetők a szegmenseken, vagy összekapcsolhatók a particionálási kulcsokkal, amelyek partícióhoz igazított módon végezhetők el az összes szegmensen. Más lekérdezési mintáknak nagy mennyiségű adatot kell betöltenie a szegmensekből a fő csomópontba, és rosszul teljesíthetnek
További lépések
- A rugalmas lekérdezés áttekintését a Rugalmas lekérdezés áttekintése című témakörben tekintheti meg.
- Függőleges particionálási oktatóanyagért tekintse meg az adatbázisközi lekérdezés (függőleges particionálás) első lépéseit.
- A függőlegesen particionált adatok szintaxisa és minta lekérdezései: Függőlegesen particionált adatok lekérdezése)
- Horizontális particionálási (horizontális) oktatóanyagért tekintse meg a horizontális particionálás (horizontális particionálás) rugalmas lekérdezésének első lépéseit.>
- Tekintse meg a sp_execute _remote egy olyan tárolt eljárást, amely transact-SQL utasítást hajt végre egyetlen távoli Azure SQL Database-adatbázison vagy horizontális particionálási sémában szegmensként szolgáló adatbázisok készletén.