Dela via


Konfigurera PolyBase för åtkomst till externa data i MongoDB

gäller för:SQL Server

Artikeln beskriver hur du använder PolyBase på en SQL Server-instans för att fråga externa data i MongoDB.

Förutsättningar

Om du inte har installerat PolyBase kan du läsa PolyBase installation.

Innan du skapar en databasomfångad autentiseringsuppgift måste databasen ha en huvudnyckel för att skydda autentiseringsuppgifterna. Mer information finns i CREATE MASTER KEY.

Konfigurera en extern MongoDB-datakälla

Om du vill köra frågor mot data från en MongoDB-datakälla måste du skapa externa tabeller för att referera till externa data. Det här avsnittet innehåller exempelkod för att skapa dessa externa tabeller.

Följande Transact-SQL kommandon används i det här avsnittet:

  1. Skapa en databasomfattande autentiseringsuppgift för åtkomst till MongoDB-källan.

    Följande skript skapar en databasomfattande autentiseringsuppgift. Innan du kör skriptet uppdaterar du det för din miljö:

    • Ersätt <credential_name> med ett namn för autentiseringsuppgifterna.
    • Ersätt <username> med användarnamnet för den externa källan.
    • Ersätt <password> med lämpligt lösenord.
    CREATE DATABASE SCOPED CREDENTIAL [<credential_name>] WITH IDENTITY = '<username>', Secret = '<password>';
    

    Viktig

    MongoDB ODBC Connector för PolyBase stöder endast grundläggande autentisering, inte Kerberos-autentisering.

  2. Skapa en extern datakälla.

    Följande skript skapar den externa datakällan. Se CREATE EXTERNAL DATA SOURCEför referens. Innan du kör skriptet uppdaterar du det för din miljö:

    • Uppdatera platsen. Ange <server> och <port> för din miljö.
    • Ersätt <credential_name> med namnet på de autentiseringsuppgifter som du skapade i föregående steg.
    • Du kan också ange PUSHDOWN = ON eller PUSHDOWN = OFF om du vill ange pushdown-beräkning för den externa källan.
    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. Fråga det externa schemat i MongoDB.

    Du kan använda tillägget Data Virtualization för Azure Data Studio för att ansluta till och generera en CREATE EXTERNAL TABLE-instruktion baserat på det schema som identifierats av PolyBase ODBC-drivrutinen för MongoDB-drivrutinen. Du kan också anpassa ett skript manuellt baserat på utdata från den systemlagringsprocedur som sp_data_source_objects (Transact-SQL). Datavirtualiseringstillägget för Azure Data Studio och sp_data_source_table_columns använder samma interna lagrade procedurer för att utföra frågor mot det externa schemat.

    Om du vill skapa externa tabeller till MongoDB-samlingar som innehåller matriser rekommenderar vi att du använder datavirtualiseringstillägg för Azure Data Studio. Utjämnande åtgärder utförs automatiskt av drivrutinen. Den sp_data_source_table_columns lagrade proceduren utför också automatiskt utplattande via PolyBase ODBC-drivrutinen för MongoDB-drivrutinen.

  4. Skapa en extern tabell.

    Om du använder tillägget Data Virtualization för Azure Data Studiokan du hoppa över det här steget eftersom instruktionen CREATE EXTERNAL TABLE genereras åt dig. Om du vill ange schemat manuellt bör du överväga följande exempelskript för att skapa en extern tabell. Referens finns i CREATE EXTERNAL TABLE.

    Innan du kör skriptet uppdaterar du det för din miljö:

    • Uppdatera fälten med deras namn, sortering och om de är samlingar anger du samlingsnamnet och fältnamnet. I exemplet är friends en anpassad datatyp.
    • Uppdatera platsen. Ange databasnamnet och tabellnamnet. Observera att tredelade namn inte är tillåtna, så du kan inte skapa det för tabellen system.profile. Du kan inte heller ange en vy eftersom den inte kan hämta metadata från den.
    • Uppdatera datakällan med namnet på den som du skapade i föregående steg.
    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. Valfritt: Skapa statistik i en extern tabell.

    Vi rekommenderar att du skapar statistik för externa tabellkolumner, särskilt de som används för kopplingar, filter och aggregeringar, för optimal frågeprestanda.

    CREATE STATISTICS statistics_name ON customer (C_CUSTKEY) WITH FULLSCAN; 
    

Viktig

När du har skapat en extern datakälla kan du använda kommandot CREATE EXTERNAL TABLE för att skapa en frågekomparabel tabell över den källan.

Ett exempel finns i Skapa en extern tabell för MongoDB.

Alternativ för MongoDB-anslutning

Information om Anslutningsalternativ för MongoDB finns i MongoDB-dokumentation: URI-format för anslutningssträngar.

Tillplattning

Utplattning är aktiverat för kapslade och upprepade data från MongoDB-dokumentkollektioner. Användaren måste aktivera create an external table och uttryckligen ange ett relationsschema över MongoDB-dokumentsamlingar som kan ha kapslade och/eller upprepade data. JSON-kapslade/upprepade datatyper plattas ut enligt följande

  • Objekt: osorterad nyckel/värdesamling omgiven av klammerparenteser (kapslad)

    • SQL Server skapar en tabellkolumn för varje objektnyckel

      • Kolumnnamn: objectname_keyname
  • Matris: ordnade värden, avgränsade med kommatecken, omgivna inom hakparenteser (upprepad)

    • SQL Server lägger till en ny tabellrad för varje matrisobjekt

    • SQL Server skapar en kolumn per matris för att lagra matrisobjektindexet

      • Kolumnnamn: arrayname_index

      • Datatyp: bigint

Det finns flera potentiella problem med den här tekniken, varav två är:

  • Ett tomt upprepat fält maskerar effektivt data i de platta fälten i samma post

  • Förekomsten av flera upprepade fält kan resultera i en explosion av antalet producerade rader

Till exempel utvärderar SQL Server MongoDB-exempeldatauppsättningens restaurangsamling som lagras i icke-relationellt JSON-format. Varje restaurang har ett kapslat adressfält och en matris med betyg som den tilldelades på olika dagar. Bilden nedan illustrerar en typisk restaurang med inkapslad adress och inkapslade och upprepade betyg.

MongoDB-flattering

Objektadressen plattas ut enligt nedan:

  • Kapslade fält restaurant.address.building blir restaurant.address_building
  • Kapslade fält restaurant.address.coord blir restaurant.address_coord
  • Kapslade fält restaurant.address.street blir restaurant.address_street
  • Kapslade fält restaurant.address.zipcode blir restaurant.address_zipcode

Array-graderna kommer att slätas ut enligt följande:

betygsdatum betyg_betyg spelpoäng
1393804800000 A 2
1378857600000 A 6
135898560000 A 10
1322006400000 A 9
1299715200000 B 14

Cosmos DB-anslutning

Med Cosmos DB Mongo API och Mongo DB PolyBase-anslutningsappen kan du skapa en extern tabell med en Cosmos DB-instans. Detta åstadkoms genom att följa samma steg som anges ovan. Kontrollera att databasomfattningens autentiseringsuppgifter, serveradress, port och platssträng återspeglar Cosmos DB-serverns.

Exempel

I följande exempel skapas en extern datakälla med följande parametrar:

Parameter Värde
Namn external_data_source_name
Tjänst mongodb0.example.com
Instans 27017
Replikuppsättning myRepl
TLS true
Pushdown-beräkning 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ästa steg

Fler självstudier om hur du skapar externa datakällor och externa tabeller till en mängd olika datakällor finns i PolyBase Transact-SQL referens.

Mer information om PolyBase finns i Översikt över SQL Server PolyBase.