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:
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- SKAPA EXTERN DATAKÄLLA (Transact-SQL)
- SKAPA EXTERN TABELL (Transact-SQL)
- SKAPA STATISTIK (Transact-SQL)
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.
- Ersätt
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
ellerPUSHDOWN = 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 } ]) [ ; ]
- Uppdatera platsen. Ange
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.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])
- Uppdatera fälten med deras namn, sortering och om de är samlingar anger du samlingsnamnet och fältnamnet. I exemplet är
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.
Objektadressen plattas ut enligt nedan:
- Kapslade fält
restaurant.address.building
blirrestaurant.address_building
- Kapslade fält
restaurant.address.coord
blirrestaurant.address_coord
- Kapslade fält
restaurant.address.street
blirrestaurant.address_street
- Kapslade fält
restaurant.address.zipcode
blirrestaurant.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.