Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
              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 = ONofPUSHDOWN = OFFopgeven 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_columnsdezelfde 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_columnsvoert 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 friendseen 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.profiletabel. 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.buildingwordtrestaurant.address_building
- Geneste veld restaurant.address.coordwordtrestaurant.address_coord
- Genest veld restaurant.address.streetwordtrestaurant.address_street
- Genest veld restaurant.address.zipcodewordtrestaurant.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.