Konfigurieren von PolyBase für den Zugriff auf externe Daten in MongoDB
Gilt für: SQL Server
In diesem Artikel wird erläutert, wie Sie PolyBase in einer SQL Server-Instanz verwenden, um externe Daten in MongoDB abzufragen.
Voraussetzungen
Wenn Sie PolyBase nicht installiert haben, finden Sie weitere Informationen unter PolyBase installation (Installieren von PolyBase).
Vor dem Erstellen von datenbankweit gültigen Anmeldeinformationen muss die Datenbank über einen Hauptschlüssel zum Schützen der Anmeldeinformationen verfügen. Weitere Informationen finden Sie unter CREATE MASTER KEY.
Konfigurieren einer externen MongoDB-Datenquelle
Zum Abfragen der Daten einer MongoDB-Datenquelle müssen Sie externe Tabellen zum Verweisen auf externe Daten erstellen. Dieser Abschnitt enthält Beispielcode zum Erstellen dieser externen Tabellen.
In diesem Abschnitt werden die folgenden Transact-SQL-Befehle verwendet:
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- ERSTELLEN EINER EXTERNEN DATENQUELLE (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- CREATE STATISTICS (Transact-SQL)
Erstellen Sie datenbankweit gültige Anmeldeinformationen für den Zugriff auf die MongoDB-Quelle.
Das folgende Skript erstellt eine datenbankweite Anmeldeinformation. Bevor Sie das Skript ausführen, müssen Sie es für Ihre Umgebung aktualisieren:
- Ersetzen Sie
<credential_name>
mit einem Namen für die Anmeldeinformation. - Ersetzen Sie
<username>
mit dem Benutzernamen für die externe Quelle. - Ersetzen Sie
<password>
mit dem entsprechenden Kennwort.
CREATE DATABASE SCOPED CREDENTIAL [<credential_name>] WITH IDENTITY = '<username>', Secret = '<password>';
Wichtig
Der MongoDB ODBC-Connector für PolyBase unterstützt nur die einfache Authentifizierung, nicht die Kerberos-Authentifizierung.
- Ersetzen Sie
Erstellen Sie eine externe Datenquelle.
Mit dem folgenden Skript wird die externe Datenquelle erstellt. Weitere Informationen finden Sie unter CREATE EXTERNAL DATA SOURCE. Bevor Sie das Skript ausführen, müssen Sie es für Ihre Umgebung aktualisieren:
- Aktualisieren Sie den Speicherort. Legen Sie
<server>
und<port>
für Ihre Umgebung fest. - Ersetzen Sie
<credential_name>
durch den Namen der im vorherigen Schritt erstellten Anmeldeinformation. - Sie können optional auch
PUSHDOWN = ON
oderPUSHDOWN = OFF
angeben, wenn Sie eine Pushdownberechnung für die externe Quelle angeben möchten.
CREATE EXTERNAL DATA SOURCE external_data_source_name WITH (LOCATION = '<mongodb://<server>[:<port>]>' [ [ , ] CREDENTIAL = <credential_name> ] [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]] [ [ , ] PUSHDOWN = { ON | OFF } ]) [ ; ]
- Aktualisieren Sie den Speicherort. Legen Sie
Abfragen des externen Schemas in MongoDB.
Sie können die Datenvirtualisierungserweiterung für Azure Data Studio verwenden, um eine Verbindung herzustellen und eine CREATE EXTERNAL TABLE-Anweisung zu generieren, die auf dem vom PolyBase ODBC-Treiber für MongoDB-Treiber erkannten Schema basiert. Sie können ein Skript auch basierend auf der Ausgabe der gespeicherten Systemprozedur sp_data_source_objects (Transact-SQL) manuell anpassen. Die Datenvirtualisierungserweiterung für Azure Data Studio und
sp_data_source_table_columns
verwenden dieselben internen gespeicherten Prozeduren, um das externe Schema abzufragen.Um externe Tabellen für MongoDB-Sammlungen zu erstellen, die Arrays enthalten, wird die Verwendung der Datenvirtualisierungserweiterung für Azure Data Studio empfohlen. Die Aktionen zur Vereinfachung werden automatisch vom Treiber ausgeführt. Die gespeicherte Prozedur
sp_data_source_table_columns
führt auch automatisch die Vereinfachung über den ODBC-Treiber in PolyBase für MongoDB-Treiber aus.Erstellen Sie eine externe Tabelle.
Wenn Sie die Datenvirtualisierungserweiterung für Azure Data Studio verwenden, können Sie diesen Schritt überspringen, da die CREATE EXTERNAL TABLE-Anweisung für Sie generiert wird. Um das Schema manuell bereitzustellen, ziehen Sie das folgende Beispielskript zum Erstellen einer externen Tabelle in Betracht. Weitere Informationen finden Sie unter CREATE EXTERNAL DATA TABLE.
Bevor Sie das Skript ausführen, müssen Sie es für Ihre Umgebung aktualisieren:
- Aktualisieren Sie die Felder mit ihrem Namen, ihrer Sortierung, und wenn es sich um Sammlungen handelt, geben Sie den Sammlungsnamen und den Feldnamen an. In diesem Beispiel ist
friends
ein benutzerdefinierter Datentyp. - Aktualisieren Sie den Speicherort. Legen Sie den Datenbanknamen und den Tabellennamen fest. Beachten Sie, dass dreiteilige Namen nicht zulässig sind, deshalb können Sie sie nicht für die
system.profile
-Tabelle erstellen. Sie können auch keine Sicht angeben, da die Tabelle die Metadaten nicht daraus abrufen kann. - Aktualisieren Sie die Datenquelle mit dem Namen der Datenquelle, die Sie im vorherigen Schritt erstellt haben.
CREATE EXTERNAL TABLE [MongoDbRandomData]( [_id] NVARCHAR(24) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, [RandomData_friends_id] INT, [RandomData_tags] NVARCHAR(MAX) COLLATE SQL_Latin1_General_CP1_CI_AS) WITH ( LOCATION='MyDb.RandomData', DATA_SOURCE=[MongoDb])
- Aktualisieren Sie die Felder mit ihrem Namen, ihrer Sortierung, und wenn es sich um Sammlungen handelt, geben Sie den Sammlungsnamen und den Feldnamen an. In diesem Beispiel ist
Optional: Erstellen Sie Statistiken für eine externe Tabelle.
Es empfiehlt sich, Statistiken für externe Tabellenspalten zu erstellen – insbesondere für diejenigen, die für Joins, Filter und Aggregate verwendet werden. So können Sie eine optimale Abfrageleistung erzielen.
CREATE STATISTICS statistics_name ON customer (C_CUSTKEY) WITH FULLSCAN;
Wichtig
Sobald Sie eine externe Datenquelle erstellt haben, können Sie über den Befehl CREATE EXTERNAL TABLE eine abfragbare Tabelle für diese Quelle erstellen.
Ein Beispiel finden Sie unter Erstellen einer externen Tabelle für MongoDB.
Verbindungsoptionen für MongoDB
Informationen zu den Verbindungsoptionen für MongoDB finden Sie in der MongoDB-Dokumentation zum URI-Format der Verbindungszeichenfolge.
Vereinfachen
Die Vereinfachung (Flattening) ist für geschachtelte und wiederholte Daten aus MongoDB-Dokumentsammlungen aktiviert. Der Benutzer muss create an external table
aktivieren und ein relationales Schema über MongoDB-Dokumentsammlungen explizit angeben, die möglicherweise geschachtelte und/oder wiederholte Daten besitzen.
Geschachtelte/wiederholte JSON-Datentypen werden wie folgt vereinfacht
Objekt: unsortierte Schlüssel-/Wertsammlung, die in geschweiften Klammern eingeschlossen wird (geschachtelt)
SQL Server erstellt eine Tabellenspalte für jeden Objektschlüssel.
- Spaltenname: objectname_keyname
Array: durch Kommas getrennte geordnete Werte, die in eckigen Klammern eingeschlossen sind (wiederholt)
SQL Server fügt eine neue Tabellenzeile für jedes Arrayelement hinzu.
SQL Server erstellt eine Spalte pro Array, um den Arrayelementindex zu speichern.
Spaltenname: arrayname_index
Datentyp: bigint
Es können mehrere potenzielle Probleme mit diesem Verfahren auftreten. Zwei davon sind die folgenden:
Ein leeres wiederholtes Feld maskiert die Daten, die in den vereinfachten Feldern des gleichen Datensatzes enthalten sind.
Das Vorhandensein mehrerer wiederholter Felder kann zu einer Explosion der Anzahl erzeugter Zeilen führen.
Beispielsweise wertet SQL Server die Auflistung der im nicht relationalen JSON-Format gespeicherten Restaurants für das MongoDB-Beispieldataset aus. Jedes Restaurant verfügt über geschachtelte Adressfelder sowie ein Array von Schulnoten, die an verschiedenen Tagen vergeben wurden. In der Abbildung unten wird ein typisches Restaurant mit geschachtelter Adresse und geschachtelten-wiederholten Schulnoten dargestellt.
Die Objektadresse wird wie unten dargestellt vereinfacht:
- Das geschachtelte Feld
restaurant.address.building
wird zurestaurant.address_building
. - Das geschachtelte Feld
restaurant.address.coord
wird zurestaurant.address_coord
. - Das geschachtelte Feld
restaurant.address.street
wird zurestaurant.address_street
. - Das geschachtelte Feld
restaurant.address.zipcode
wird zurestaurant.address_zipcode
.
Die Arraynoten werden wie unten dargestellt vereinfacht:
grades_date | grades_grade | games_score |
---|---|---|
1393804800000 | A | 2 |
1378857600000 | A | 6 |
135898560000 | A | 10 |
1322006400000 | A | 9 |
1299715200000 | b | 14 |
Cosmos DB-Verbindung
Mithilfe der Cosmos DB-API und des PolyBase-Connectors für MongoDB können Sie eine externe Tabelle einer Cosmos DB-Instanz erstellen. Führen Sie dazu die oben genannten Schritte aus. Stellen Sie sicher, dass die datenbankweit gültigen Anmeldeinformationen, die Serveradresse, der Port und die Standortzeichenabfolge die des Cosmos DB-Servers widerspiegeln.
Beispiele
Im folgenden Beispiel wird eine externe Datenquelle mit den folgenden Parametern erstellt:
Parameter | Wert |
---|---|
Name | external_data_source_name |
Dienst | mongodb0.example.com |
Instanz | 27017 |
Replikatgruppe | myRepl |
TLS | true |
Pushdownberechnung | On |
CREATE EXTERNAL DATA SOURCE external_data_source_name
WITH (LOCATION = 'mongodb://mongodb0.example.com:27017',
CONNECTION_OPTIONS = 'replicaSet=myRepl; tls=true',
PUSHDOWN = ON ,
CREDENTIAL = credential_name);
Nächste Schritte
Weitere Lernprogramme zum Erstellen externer Datenquellen und externer Tabellen für eine Vielzahl von Datenquellen finden Sie unter PolyBase Transact-SQL-Referenz.
Weitere Informationen zu PolyBase finden Sie in der Übersicht zu SQL Server-PolyBase.