PolyBase configureren voor toegang tot externe gegevens in MongoDB
van toepassing op:SQL Server-
In het artikel wordt uitgelegd hoe u PolyBase op een SQL Server-exemplaar gebruikt om een query uit te voeren op externe gegevens in MongoDB.
Voorwaarden
Als u PolyBase nog niet hebt geïnstalleerd, raadpleegt u PolyBase-installatie.
Voordat u een databasereferentie met een bereik maakt, moet de database een hoofdsleutel hebben om de referentie te beveiligen. Zie CREATE MASTER KEYvoor meer informatie.
Een externe MongoDB-gegevensbron configureren
Als u een query wilt uitvoeren op de gegevens uit een MongoDB-gegevensbron, moet u externe tabellen maken om te verwijzen naar de externe gegevens. Deze sectie bevat voorbeeldcode voor het maken van deze externe tabellen.
In deze sectie worden de volgende Transact-SQL opdrachten gebruikt:
- nl-NL: CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- STATISTIEKEN maken (Transact-SQL)
Maak een databasespecifieke referentie voor toegang tot de MongoDB-bron.
Met het volgende script maakt u een referentie voor databasebereik. Voordat u het script uitvoert, werkt u het bij voor uw omgeving:
- Vervang
<credential_name>
door een naam voor de referentie. - Vervang
<username>
door de gebruikersnaam voor de externe bron. - Vervang
<password>
door het juiste wachtwoord.
CREATE DATABASE SCOPED CREDENTIAL [<credential_name>] WITH IDENTITY = '<username>', Secret = '<password>';
Belangrijk
De MongoDB ODBC-connector voor PolyBase ondersteunt alleen basisverificatie, niet Kerberos-verificatie.
- Vervang
Maak een externe gegevensbron.
Met het volgende script wordt de externe gegevensbron gemaakt. Zie CREATE EXTERNAL DATA SOURCEvoor referentie. Voordat u het script uitvoert, werkt u het bij voor uw omgeving:
- Werk de locatie bij. Stel de
<server>
en<port>
in voor uw omgeving. - Vervang
<credential_name>
door de naam van de referentie die u in de vorige stap hebt gemaakt. - U kunt desgewenst
PUSHDOWN = ON
ofPUSHDOWN = OFF
opgeven als u pushdownberekeningen naar de externe bron wilt opgeven.
CREATE EXTERNAL DATA SOURCE external_data_source_name WITH (LOCATION = '<mongodb://<server>[:<port>]>' [ [ , ] CREDENTIAL = <credential_name> ] [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]] [ [ , ] PUSHDOWN = { ON | OFF } ]) [ ; ]
- Werk de locatie bij. Stel de
Voer een query uit op het externe schema in MongoDB.
U kunt de Data Virtualization-extensie voor Azure Data Studio gebruiken om verbinding te maken met en een CREATE EXTERNAL TABLE-instructie te genereren op basis van het schema dat is gedetecteerd door het PolyBase ODBC-stuurprogramma voor MongoDB-stuurprogramma. U kunt een script ook handmatig aanpassen op basis van de uitvoer van de door het systeem opgeslagen procedure sp_data_source_objects (Transact-SQL). De datavirtualisatie-extensie voor Azure Data Studio en
sp_data_source_table_columns
dezelfde interne opgeslagen procedures gebruiken om een query uit te voeren op het externe schemaschema.Als u externe tabellen wilt maken voor MongoDB-verzamelingen die matrices bevatten, is het raadzaam om Data Virtualization-extensie te gebruiken voor Azure Data Studio. De afvlakkende acties worden automatisch uitgevoerd door het besturingsprogramma. De opgeslagen procedure
sp_data_source_table_columns
voert ook automatisch de flattening uit via het PolyBase ODBC-stuurprogramma voor MongoDB.Maak een externe tabel.
Als u de Data Virtualization-extensie voor Azure Data Studiogebruikt, kunt u deze stap overslaan, omdat de instructie CREATE EXTERNAL TABLE voor u wordt gegenereerd. Als u het schema handmatig wilt opgeven, kunt u het volgende voorbeeldscript gebruiken om een externe tabel te maken. Ter referentie, zie CREATE EXTERNAL TABLE.
Voordat u het script uitvoert, moet u het bijwerken voor uw omgeving:
- Werk de velden bij met hun naam, sortering en als het verzamelingen zijn, geeft u de naam van de verzameling en de veldnaam op. In het voorbeeld is
friends
een aangepast gegevenstype. - Werk de locatie bij. Stel de databasenaam en de tabelnaam in. Opmerking: namen van drie delen zijn niet toegestaan, dus u kunt deze niet maken voor de
system.profile
tabel. U kunt ook geen weergave opgeven omdat deze de metagegevens niet kan ophalen. - Werk de gegevensbron bij met de naam van de gegevensbron die u in de vorige stap hebt gemaakt.
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])
- Werk de velden bij met hun naam, sortering en als het verzamelingen zijn, geeft u de naam van de verzameling en de veldnaam op. In het voorbeeld is
Optioneel: Statistieken maken in een externe tabel.
We raden u aan statistieken te maken voor externe tabelkolommen, met name de kolommen die worden gebruikt voor joins, filters en aggregaties, voor optimale queryprestaties.
CREATE STATISTICS statistics_name ON customer (C_CUSTKEY) WITH FULLSCAN;
Belangrijk
Zodra u een externe gegevensbron hebt gemaakt, kunt u de opdracht CREATE EXTERNAL TABLE opdracht gebruiken om een tabel met query's voor die bron te maken.
Zie Een externe tabel maken voor MongoDB-voor een voorbeeld.
Verbindingsopties voor MongoDB
Zie MongoDB-documentatie voor informatie over mongoDB-verbindingsreeksindeling.
Afvlakken
Vervlakking is ingeschakeld voor geneste en herhaalde gegevens uit MongoDB-documentverzamelingen. De gebruiker moet create an external table
inschakelen en expliciet een relationeel schema opgeven voor MongoDB-documentverzamelingen die mogelijk geneste en/of herhaalde gegevens bevatten.
Geneste/herhaalde JSON-gegevenstypen worden als volgt afgevlakt
Object: niet-geordende sleutel/waardeverzameling ingesloten in accolades (genest)
SQL Server maakt een tabelkolom voor elke objectsleutel
- Kolomnaam: objectname_keyname
Array: geordende waarden, gescheiden door komma's, tussen vierkante haken (herhaald)
SQL Server voegt een nieuwe tabelrij toe voor elk matrixitem
SQL Server maakt een kolom per matrix om de matrixitemindex op te slaan
Kolomnaam: arrayname_index
Gegevenstype: bigint
Er zijn verschillende mogelijke problemen met deze techniek:
Met een leeg herhaald veld worden de gegevens in de platte velden van dezelfde record effectief gemaskeerd
De aanwezigheid van meerdere herhaalde velden kan leiden tot een explosie van het aantal geproduceerde rijen
SQL Server evalueert bijvoorbeeld de MongoDB-voorbeeldgegevenssetrestaurantverzameling die is opgeslagen in een niet-relationele JSON-indeling. Elk restaurant heeft geneste adresvelden en een lijst met cijfers die het kreeg op verschillend dagen. In de onderstaande afbeelding ziet u een typisch restaurant met onderling verbonden adressen en herhaalbare cijfers.
Objectadres wordt afgevlakt zoals hieronder:
- Geneste veld
restaurant.address.building
wordtrestaurant.address_building
- Geneste veld
restaurant.address.coord
wordtrestaurant.address_coord
- Genest veld
restaurant.address.street
wordtrestaurant.address_street
- Genest veld
restaurant.address.zipcode
wordtrestaurant.address_zipcode
Matrixklassen worden afgevlakt zoals hieronder:
cijferdatum | grades_grade | games_score |
---|---|---|
1393804800000 | Een | 2 |
1378857600000 | Een | 6 |
135898560000 | Een | 10 |
1322006400000 | Een | 9 |
1299715200000 | B | 14 |
Cosmos DB-verbinding
Met behulp van de Mongo-API van Cosmos DB en de Mongo DB PolyBase-connector kunt u een externe tabel maken van een Cosmos DB-exemplaar. Dit wordt bereikt door dezelfde stappen te volgen die hierboven worden vermeld. Zorg ervoor dat de databasereferenties, serveradres, poort en locatietekenreeks overeenkomen met die van de Cosmos DB-server.
Voorbeelden
In het volgende voorbeeld wordt een externe gegevensbron gemaakt met de volgende parameters:
Parameter | Waarde |
---|---|
Naam | external_data_source_name |
Dienst | mongodb0.example.com |
Voorbeeld | 27017 |
Replicaset | myRepl |
TLS | true |
Pushdownberekening | 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);
Volgende stappen
Zie PolyBase Transact-SQL referentievoor meer handleidingen over het maken van externe gegevensbronnen en externe tabellen voor verschillende gegevensbronnen.
Zie Overzicht van SQL Server PolyBasevoor meer informatie over PolyBase.