Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für::Azure SQL-Datenbank
Horizontal partitionierte Datenbanken verteilen Zeilen auf einer horizontal hochskalierten Datenebene. Das Schema ist auf allen teilnehmenden Datenbanken identisch, auch bekannt als horizontale Partitionierung. Mit einer flexiblen Abfrage können Sie Berichte erstellen, die alle Datenbanken in einer horizontal partitionierten Datenbank umfassen.
Eine Schnellstartanleitung finden Sie unter Bericht über skalierte Clouddatenbanken (Vorschau).
Informationen zu nicht shardierten Datenbanken finden Sie unter Abfrage in Clouddatenbanken mit unterschiedlichen Schemas (Vorschau).For non-sharded databases, see Query across cloud databases with different schemas (preview).
Voraussetzungen
- Erstellen Sie mithilfe der Clientbibliothek für elastische Datenbanken eine Shardzuordnung. siehe Datenbanken skalieren mit dem Shard-Map-Manager. Oder verwenden Sie die Beispiel-App in " Erste Schritte mit Elastic Database Tools".
- Alternativ sehen Sie Migrieren Sie vorhandene Datenbanken, um die Skalierung zu erweitern.
- Der Benutzer muss über die Berechtigung ALTER ANY EXTERNAL DATA SOURCE verfügen. Diese Berechtigung ist in der Berechtigung ALTER DATABASE enthalten.
- ALTER ANY EXTERNAL DATA SOURCE-Berechtigungen sind erforderlich, um auf die zu Grunde liegende Datenquelle zu verweisen.
Übersicht
Diese Anweisungen erstellen die Metadatendarstellung Ihrer Shardingdatenebene in der elastischen Abfragedatenbank.
- MASTERSCHLÜSSEL ERSTELLEN
- DATENBANKBEREICHSBEZOGENE ANMELDEINFORMATIONEN ERSTELLEN
- EXTERNE DATENQUELLE ERSTELLEN
- EXTERNE TABELLE ERSTELLEN
1.1 Erstellen des Datenbankhauptschlüssels und der Anmeldeinformationen
Die Anmeldeinformationen werden von der elastischen Abfrage für die Verbindung mit Ihren Remotedatenbanken verwendet.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
CREATE DATABASE SCOPED CREDENTIAL [<credential_name>] WITH IDENTITY = '<username>',
SECRET = '<password>';
Hinweis
Stellen Sie sicher, dass der „<Benutzername>“ kein „@Servername“-Suffix enthält.
1.2 Erstellen externer Datenquellen
Syntax:
<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>'
) [;]
Beispiel
CREATE EXTERNAL DATA SOURCE MyExtSrc
WITH
(
TYPE=SHARD_MAP_MANAGER,
LOCATION='myserver.database.windows.net',
DATABASE_NAME='ShardMapDatabase',
CREDENTIAL= SMMUser,
SHARD_MAP_NAME='ShardMap'
);
Rufen Sie die Liste der aktuellen externen Datenquellen ab:
select * from sys.external_data_sources;
Die externe Datenquelle verweist auf Ihre Shardzuordnung. Eine elastische Abfrage verwendet anschließend die externe Datenquelle und zugrunde liegende Shardzuordnung zum Auflisten der Datenbanken, die zur Datenebene gehören.
Die gleichen Anmeldeinformationen werden während der Verarbeitung der elastischen Abfrage zum Lesen der Shardzuordnung und für den Zugriff auf die Daten in den Shards verwendet .
1.3 Erstellen externer Tabellen
Syntax:
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
Beispiel
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)
);
Rufen Sie die Liste der externen Tabellen aus der aktuellen Datenbank ab:
SELECT * from sys.external_tables;
So löschen Sie externe Tabellen:
DROP EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ] table_name[;]
Bemerkungen
Die DATA_SOURCE-Klausel definiert die externe Datenquelle (eine Shard-Map), die für die externe Tabelle verwendet wird.
Die SCHEMA_NAME- und OBJECT_NAME-Klauseln bilden die Definition der externen Tabelle auf eine Tabelle in einem anderen Schema ab. Falls nicht angegeben, wird davon ausgegangen, dass das Schema des Remoteobjekts dbo und sein Name mit dem definierten Namen der externen Tabelle identisch ist. Dies ist nützlich, wenn der Name der Remotetabelle bereits in der Datenbank verwendet wird, in der Sie die externe Tabelle erstellen möchten. Sie möchten z. B. eine externe Tabelle zum Abrufen einer aggregierten Sicht von Katalogsichten oder DMVs für Ihre horizontal hochskalierte Datenebene definieren. Da Katalogsichten und DMVs bereits lokal vorhanden sind, können Sie ihre Namen nicht für die Definition der externen Tabelle verwenden. Verwenden Sie stattdessen einen anderen Namen und nutzen Sie den Namen der Katalogansicht oder den DMV-Namen in den SCHEMA_NAME und/oder OBJECT_NAME Bedingungen. (Siehe das Beispiel später.)
Die DISTRIBUTION Klausel gibt die für diese Tabelle verwendete Datenverteilung an. Der Abfrageprozessor verwendet die in der DISTRIBUTION Klausel bereitgestellten Informationen, um die effizientesten Abfragepläne zu erstellen.
-
SHARDEDbedeutet, dass Daten horizontal in den Datenbanken partitioniert werden. Der Partitionierungsschlüssel für die Datenverteilung ist der Parameter<sharding_column_name>. -
REPLICATEDbedeutet, dass in jeder Datenbank identische Kopien der Tabelle vorhanden sind. Sie müssen sicherstellen, dass die Replikate in allen Datenbanken identisch sind. -
ROUND_ROBINbedeutet, dass die Tabelle mithilfe einer anwendungsabhängigen Verteilungsmethode horizontal partitioniert wird.
Datenschichtverweis: Die DDL für externe Tabellen verweist auf eine externe Datenquelle. Die externe Datenquelle gibt eine Shardzuordnung an, die der externen Tabelle die Informationen bereitstellt, die benötigt werden, um alle Datenbanken in Ihrer Datenebene zu finden.
Sicherheitshinweise
Benutzer mit Zugriff auf die externe Tabelle erhalten automatisch Zugriff auf die zugrunde liegenden Remotetabellen gemäß den Anmeldeinformationen, die in der externen Datenquellendefinition angegeben sind. Vermeiden Sie eine unerwünschte Erhöhung von Berechtigungen durch die Anmeldeinformationen der externen Datenquelle. Verwenden Sie GRANT oder REVOKE für eine externe Tabelle, als handele es sich um eine normale Tabelle.
Nachdem Sie die externe Datenquelle und die externen Tabellen definiert haben, können Sie jetzt vollständiges T-SQL in den externen Tabellen verwenden.
Beispiel: Abfragen von horizontal partitionierten Datenbanken
Die folgende Abfrage führt eine Verknüpfung in drei Richtungen zwischen Lagern, Bestellungen und Auftragspositionen aus. Sie nutzt mehrere Aggregate und einen selektiven Filter. Es wird Folgendes vorausgesetzt: 1.) eine horizontale Partitionierung (Sharding), 2.) dass für Lager, Aufträge und Auftragspositionen ein Sharding anhand der Spalte „warehouse ID“ erfolgt ist, und 3.) dass die elastische Abfrage die Verknüpfungen für die Shards anordnen und den aufwendigen Teil der Abfrage in den Shards parallel verarbeiten kann.
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
Gespeicherte Prozedur für T-SQL-Remoteausführung: sp_execute_remote
Mit der elastischen Abfrage wurde auch eine gespeicherte Prozedur eingeführt, die einen Direktzugriff auf die Shards bietet. Die gespeicherte Prozedur sp_execute_remote ermöglicht das Ausführen von entfernten gespeicherten Prozeduren oder T-SQL-Code in den Remotedatenbanken. Hierfür werden die folgenden Parameter verwendet:
- Datenquellenname (nvarchar): Der Name der externen Datenquelle vom Typ RDBMS.
- Abfrage (nvarchar): Die T-SQL-Abfrage, die für jede Shard ausgeführt werden soll.
- Parameterdeklaration (nvarchar) – optional: Zeichenfolge mit Datentypdefinitionen für die parameter, die im Abfrageparameter verwendet werden (z. B.
sp_executesql) - Parameterwertliste - optional: Durch Trennzeichen getrennte Liste von Parameterwerten (z. B
sp_executesql. )
Die sp_execute_remote externe Datenquelle wird in den Aufrufparametern verwendet, um die angegebene T-SQL-Anweisung für die Remotedatenbanken auszuführen. Die Anmeldeinformationen der externen Datenquelle werden verwendet, um die Verbindung mit der ShardMapManager-Datenbank und den Remotedatenbanken herzustellen.
Beispiel:
EXEC sp_execute_remote
N'MyExtSrc',
N'select count(w_id) as foo from warehouse'
Konnektivität für Tools
Verwenden Sie herkömmliche SQL Server-Verbindungszeichenfolgen, um Ihre Anwendung sowie Ihre BI- und Datenintegrationstools für die Datenbank mit Ihren Definitionen externer Tabellen zu verbinden. Stellen Sie sicher, dass SQL Server als Datenquelle für das Tool unterstützt wird. Verweisen Sie dann auf die elastische Abfragedatenbank wie auf beliebige andere mit dem Tool verbundenen SQL Server-Datenbanken, und nutzen Sie externe Tabellen in Ihren Tools oder Anwendungen, als wären es lokale Tabellen.
Bewährte Methoden
- Stellen Sie sicher, dass die Endpunktdatenbank für elastische Abfragen durch die Firewalls von SQL-Datenbank hindurch Zugriff auf die Datenbank mit der Shardzuordnung und alle Shards hat.
- Überprüfen oder erzwingen Sie die in der externen Tabelle definierte Verteilung der Daten. Wenn sich die tatsächliche Datenverteilung von der in der Tabellendefinition angegebenen Verteilung unterscheidet, ergeben Ihre Abfragen möglicherweise unerwartete Ergebnisse.
- Die elastische Abfrage führt derzeit keine Shardlöschung durch, wenn Prädikate für Shardingschlüssel ein gefahrloses Ausschließen der Verarbeitung bestimmter Shards zulassen würden.
- Eine elastische Abfrage funktioniert am besten für Abfragen, in denen der größte Teil der Berechnung in den Shards erfolgt. In der Regel erhalten Sie optimale Abfrageleistung mit benutzerdefinierten Filterprädikaten, die in den Shards oder Verknüpfungen über die Partitionierungsschlüssel ausgewertet werden können, die auf partitionsbezogene Weise auf allen Shards ausgeführt werden können. Andere Abfragemuster müssen möglicherweise große Datenmengen aus den Shards in den Kopfknoten laden und können schlecht ausgeführt werden.
Verwandte Inhalte
- Übersicht über eine flexible Azure SQL-Datenbankabfrage (Vorschau)
- Erste Schritte mit datenbankübergreifenden Abfragen (vertikale Partitionierung, Vorschau)
- Ausführen von Abfragen über Clouddatenbanken mit unterschiedlichen Schemas hinweg (Vorschau)
- Erstellen von Berichten für horizontal hochskalierte Clouddatenbanken