Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:Azure SQL Database
Horizontálně dělené databáze distribuují řádky napříč škálovanou datovou vrstvou. Schéma je stejné u všech zúčastněných databází, označovaných také jako horizontální dělení. Pomocí elastického dotazu můžete vytvářet sestavy, které pokrývají všechny databáze v horizontálně dělené databázi.
Pro rychlý start si přečtěte Sestava napříč cloudovými databázemi s rozšířenou kapacitou (náhled).
Informace o nehardovaných databázích najdete v tématu Dotazování napříč cloudovými databázemi s různými schématy (Preview).
Požadavky
- Vytvořte mapu horizontálních oddílů pomocí klientské knihovny elastické databáze. Viz Horizontální škálování databází pomocí správce oddílové mapy. Nebo použijte ukázkovou aplikaci v části Začínáme s Elastic Database Tools.
- Případně si přečtěte téma Migrace existujících databází pro škálované rozšíření kapacity.
- Uživatel musí mít oprávnění ALTER ANY EXTERNAL DATA SOURCE. Toto oprávnění je součástí oprávnění ALTER DATABASE.
- K odkazování na podkladový zdroj dat jsou potřeba oprávnění ALTER ANY EXTERNAL DATA SOURCE.
Přehled
Tyto příkazy vytvářejí reprezentaci metadat vrstvy horizontálně dělených dat v databázi elastických dotazů.
- VYTVOŘENÍ HLAVNÍHO KLÍČE
- VYTVOŘENÍ PŘIHLAŠOVACÍCH ÚDAJŮ S ROZSAHEM DATABÁZE
- VYTVOŘENÍ EXTERNÍHO ZDROJE DAT
- VYTVOŘENÍ EXTERNÍ TABULKY
1.1 Vytvoření hlavního klíče a přihlašovacích údajů s vymezeným oborem databáze
Přihlašovací údaje používá elastický dotaz pro připojení ke vzdáleným databázím.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
CREATE DATABASE SCOPED CREDENTIAL [<credential_name>] WITH IDENTITY = '<username>',
SECRET = '<password>';
Poznámka:
Ujistěte se, že <> neobsahuje příponu "@servername".
1.2 Vytvoření externích zdrojů dat
Syntaxe:
<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říklad
CREATE EXTERNAL DATA SOURCE MyExtSrc
WITH
(
TYPE=SHARD_MAP_MANAGER,
LOCATION='myserver.database.windows.net',
DATABASE_NAME='ShardMapDatabase',
CREDENTIAL= SMMUser,
SHARD_MAP_NAME='ShardMap'
);
Načtení seznamu aktuálních externích zdrojů dat:
select * from sys.external_data_sources;
Externí zdroj dat odkazuje na mapu horizontálních oddílů. Elastický dotaz pak použije externí zdroj dat a podkladovou mapu horizontálních oddílů k vytvoření výčtu databází, které se účastní datové vrstvy.
Stejné přihlašovací údaje slouží ke čtení mapy horizontálních oddílů a k přístupu k datům v horizontálních oddílech během zpracování elastického dotazu.
1.3 Vytvoření externích tabulek
Syntaxe:
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říklad
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)
);
Načtení seznamu externích tabulek z aktuální databáze:
SELECT * from sys.external_tables;
Odstranění externích tabulek:
DROP EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ] table_name[;]
Poznámky
Klauzule DATA_SOURCE
definuje externí zdroj dat (mapování horizontálních oddílů), který se používá pro externí tabulku.
Klauzule SCHEMA_NAME
a OBJECT_NAME
mapují definici externí tabulky na tabulku v jiném schématu. Pokud toto vynecháte, předpokládá se, že schéma vzdáleného objektu je dbo
a jeho název je považován za stejný jako název externí tabulky, který je definován. To je užitečné, pokud je název vzdálené tabulky již převzat v databázi, ve které chcete vytvořit externí tabulku. Chcete například definovat externí tabulku, abyste získali agregované zobrazení zobrazení katalogu nebo zobrazení dynamické správy na datové vrstvě s horizontálním navýšením kapacity. Vzhledem k tomu, že zobrazení katalogu a zobrazení dynamické správy již existují místně, nemůžete použít jejich názvy pro definici externí tabulky. Místo toho použijte jiný název a použijte název zobrazení katalogu nebo názvu DMV ve klauzulích SCHEMA_NAME
a/nebo OBJECT_NAME
. (Viz příklad později.)
Klauzule DISTRIBUTION
určuje distribuci dat použitou pro tuto tabulku. Procesor dotazů využívá informace uvedené v DISTRIBUTION
klauzuli k vytvoření nejúčinnějších plánů dotazů.
-
SHARDED
znamená, že data jsou horizontálně rozdělena mezi databáze. Klíč dělení pro distribuci dat je parametr<sharding_column_name>
. -
REPLICATED
znamená, že v každé databázi jsou přítomny stejné kopie tabulky. Je vaší zodpovědností zajistit, aby repliky byly v databázích stejné. -
ROUND_ROBIN
znamená, že tabulka je horizontálně rozdělena pomocí metody distribuce závislé na aplikaci.
Odkaz na datovou vrstvu: Externí tabulka DDL odkazuje na externí zdroj dat. Externí zdroj dat určuje mapu horizontálních oddílů, která poskytuje externí tabulku s informacemi potřebnými k vyhledání všech databází ve vaší datové vrstvě.
Bezpečnostní aspekty
Uživatelé s přístupem k externí tabulce automaticky získají přístup k podkladovým vzdáleným tabulkám v rámci přihlašovacích údajů zadaných v definici externího zdroje dat. Vyhněte se nežádoucímu zvýšení oprávnění prostřednictvím přihlašovacích údajů externího zdroje dat. Pro externí tabulku použijte funkci GRANT nebo REVOKE, jako by šlo o běžnou tabulku.
Po definování externího zdroje dat a externích tabulek teď můžete pro externí tabulky použít úplný T-SQL.
Příklad: Dotazování vodorovných dělených databází
Následující dotaz provádí třícestné spojení mezi sklady, objednávkami a řádky objednávek a používá několik agregací a selektivní filtr. Předpokládá (1) horizontální dělení (horizontální dělení) a (2), že sklady, objednávky a řádky objednávek jsou horizontálně dělené podle sloupce ID skladu a že elastický dotaz může společně vyhledat spojení v horizontálních oddílech a zpracovat nákladnou část dotazu na horizontálních oddílech paralelně.
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
Uložená procedura pro vzdálené spouštění T-SQL: sp_execute_remote
Elastický dotaz také zavádí uloženou proceduru, která poskytuje přímý přístup k horizontálním oddílům. Uložená procedura se nazývá sp_execute_remote a lze ji použít ke spouštění vzdálených uložených procedur nebo kódu T-SQL ve vzdálených databázích. Přebírá následující parametry:
- Název zdroje dat (nvarchar): Název externího zdroje dat typu RDBMS.
- Dotaz (nvarchar): Dotaz T-SQL, který se má spustit na každém shardu.
- Deklarace parametru (nvarchar) – volitelné: Řetězec s definicemi datového typu pro parametry použité v parametru dotazu (například
sp_executesql)
- Seznam hodnot parametrů – volitelný: Seznam hodnot parametrů oddělený čárkami (například
sp_executesql
)
Používá sp_execute_remote
externí zdroj dat zadaný v parametrech vyvolání ke spuštění daného příkazu T-SQL ve vzdálených databázích. Používá přihlašovací údaje externího zdroje dat pro připojení k databázi správce shardmap a vzdáleným databázím.
Příklad:
EXEC sp_execute_remote
N'MyExtSrc',
N'select count(w_id) as foo from warehouse'
Možnosti připojení pro nástroje
Pomocí běžných připojovací řetězec SQL Serveru připojte aplikaci, bi a nástroje pro integraci dat k databázi s definicemi externí tabulky. Ujistěte se, že sql Server je podporovaný jako zdroj dat pro váš nástroj. Pak na databázi elastických dotazů odkazujte stejně jako na jakoukoli jinou databázi SQL Serveru připojenou k nástroji a použijte externí tabulky z vašeho nástroje nebo aplikace, jako by se jednalo o místní tabulky.
Osvědčené postupy
- Ujistěte se, že databáze koncového bodu elastického dotazu získala přístup k databázi mapy horizontálních oddílů a všem horizontálním oddílům prostřednictvím bran firewall služby SQL Database.
- Ověřte nebo vynucujte distribuci dat definovanou externí tabulkou. Pokud se vaše skutečná distribuce dat liší od distribuce zadané v definici tabulky, můžou dotazy přinést neočekávané výsledky.
- Elastický dotaz v současné době neprovádí odstranění horizontálních oddílů, pokud by predikát přes klíč horizontálního dělení umožnil bezpečně vyloučit určité horizontální oddíly ze zpracování.
- Elastický dotaz je nejvhodnější pro dotazy, ve kterých je možné provádět většinu výpočtů na horizontálních oddílech. Obvykle získáte nejlepší výkon dotazů pomocí predikátů selektivního filtru, které je možné vyhodnotit na horizontálních oddílech nebo spojeních s klíči dělení, které je možné provést způsobem sladěným s oddíly u všech horizontálních oddílů. Jiné vzory dotazů můžou potřebovat načíst velké objemy dat z dílů do hlavního uzlu a mohou mít nízký výkon.