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
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.
Gyors kezdéshez tekintse meg Jelentés horizontálisan felskálázott felhőbeli adatbázisokban (előzetes verzió).
A nem horizontálisan elosztott adatbázisokról a különböző sémákkal rendelkező felhőadatbázisok lekérdezése (előzetes verzió) című témakörben olvashat.
Előfeltételek
- Szegmenstérkép létrehozása a rugalmas adatbázis-ügyfélkódtár használatával. lásd: Adatbázisok horizontális felskálázása a szegmenstérkép-kezelővel. Vagy használja a mintaalkalmazást az Elastic Database Tools használatának első lépéseiben.
- Másik lehetőségként tekintse meg a meglévő adatbázisok migrálását a vertikális felskálázáshoz.
- A felhasználónak rendelkeznie kell az "ALTER ANY EXTERNAL DATA SOURCE" engedéllyel. 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
- HOZZON LÉTRE ADATBÁZIS LÉPTÉKŰ HITELESSÉGI ADATOKAT
- HOZZÁ EGY KÜLSŐ ADATFORRÁST
- 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 törlé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 egy másik sémában lévő táblára képezik le a külső tábladefiníciót. 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 helyezze el a katalógusnézet vagy a DMV nevét a SCHEMA_NAME
és/vagy OBJECT_NAME
záradékokban. (Lásd a példát később.)
A DISTRIBUTION
záradék a táblához használt adateloszlást határozza meg. A lekérdezésfeldolgozó a záradékban DISTRIBUTION
megadott információkat használja a leghatékonyabb lekérdezési tervek létrehozásához.
-
SHARDED
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. -
REPLICATED
azt jelenti, hogy a tábla azonos példányai találhatók az egyes adatbázisokban. 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álva van egy alkalmazásfüggő terjesztési módszerrel.
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 (sharding) és (2) a raktárak, rendelések és rendeléssorok felosztva vannak a raktár ID oszlop szerint, és hogy a rugalmas lekérdezés egymás mellé tudja helyezni a szegmenseken lévő illesztéseket, és a lekérdezés drága részét párhuzamosan dolgozhatja fel 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 használt paraméterek adattípus-definícióit tartalmazó sztring (például
sp_executesql)
- 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
meghívási paraméterekben megadott külső adatforrás használatával hajtja végre a megadott T-SQL utasítást a távoli adatbázisokon. 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 adatbázishoz való csatlakoztatásához használja a szokásos SQL Server-kapcsolati karakterláncokat a külső táblák definícióival. 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 szelektív szűrő predikátumokkal érheti el, amelyek kiértékelhetők a töredékeken, vagy a particionálási kulcsokon történő kapcsolódással, amely partícióhoz igazított módon végezhető el minden töredéken. Más lekérdezési mintáknak nagy mennyiségű adatot kell betöltenie a szegmensekből a főcsomópontra, és rosszul tudnak teljesíteni.