Delen via


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:

  1. 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.

  2. 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 of PUSHDOWN = 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 } ])
    [ ; ]
    
  3. 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.

  4. 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])
    
  5. 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.

MongoDB platmaken

Objectadres wordt afgevlakt zoals hieronder:

  • Geneste veld restaurant.address.building wordt restaurant.address_building
  • Geneste veld restaurant.address.coord wordt restaurant.address_coord
  • Genest veld restaurant.address.street wordt restaurant.address_street
  • Genest veld restaurant.address.zipcode wordt restaurant.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.