Konfigurace PolyBase pro přístup k externím datům v MongoDB
platí pro:SQL Server
Tento článek vysvětluje, jak pomocí PolyBase v instanci SQL Serveru dotazovat externí data v MongoDB.
Požadavky
Pokud jste nenainstalovali PolyBase, podívejte se na instalace PolyBase.
Před vytvořením přihlašovacích údajů s vymezeným oborem databáze musí mít databáze hlavní klíč pro ochranu přihlašovacích údajů. Další informace naleznete v tématu CREATE MASTER KEY.
Konfigurace externího zdroje dat MongoDB
Pokud chcete dotazovat data ze zdroje dat MongoDB, musíte vytvořit externí tabulky pro odkazování na externí data. Tato část obsahuje ukázkový kód pro vytvoření těchto externích tabulek.
V této části se používají následující příkazy Transact-SQL:
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- VYTVOŘIT EXTERNÍ ZDROJ DAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- CREATE STATISTICS (Transact-SQL)
Vytvořte přihlašovací údaje s vymezeným oborem databáze pro přístup ke zdroji MongoDB.
Následující skript vytvoří přihlašovací údaje s vymezeným oborem databáze. Před spuštěním skriptu jej aktualizujte pro vaše prostředí:
- Nahraďte
<credential_name>
názvem přihlašovacích údajů. - Nahraďte
<username>
uživatelským jménem pro externí zdroj. - Nahraďte
<password>
odpovídajícím heslem.
CREATE DATABASE SCOPED CREDENTIAL [<credential_name>] WITH IDENTITY = '<username>', Secret = '<password>';
Důležitý
Konektor MongoDB ODBC pro PolyBase podporuje pouze základní ověřování, nikoli ověřování Kerberos.
- Nahraďte
Vytvořte externí zdroj dat.
Následující skript vytvoří externí zdroj dat. Referenční informace najdete v tématu VYTVOŘENÍ EXTERNÍHO ZDROJE DAT. Než spustíte skript, aktualizujte jej pro vaše prostředí:
- Aktualizujte umístění. Nastavte
<server>
a<port>
pro vaše prostředí. - Nahraďte
<credential_name>
názvem přihlašovacích údajů, které jste vytvořili v předchozím kroku. - Volitelně můžete zadat
PUSHDOWN = ON
neboPUSHDOWN = OFF
, pokud chcete zadat výpočet posunu do externího zdroje.
CREATE EXTERNAL DATA SOURCE external_data_source_name WITH (LOCATION = '<mongodb://<server>[:<port>]>' [ [ , ] CREDENTIAL = <credential_name> ] [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]] [ [ , ] PUSHDOWN = { ON | OFF } ]) [ ; ]
- Aktualizujte umístění. Nastavte
Zadejte dotaz na externí schéma v MongoDB.
Rozšíření Data Virtualization pro Azure Data Studio můžete použít k připojení a vygenerování příkazu CREATE EXTERNAL TABLE na základě schématu zjištěného ovladačem PolyBase ODBC pro MongoDB. Můžete také ručně přizpůsobit skript na základě výstupu systémové uložené procedury sp_data_source_objects (Transact-SQL). Rozšíření Data Virtualization pro Azure Data Studio a
sp_data_source_table_columns
využívají stejné interní uložené procedury ke dotazování externího schématu.Pokud chcete vytvořit externí tabulky pro kolekce MongoDB, které obsahují pole, doporučujeme použít rozšíření Data Virtualization pro Azure Data Studio. Akce zploštění provádí ovladač automaticky. Uložená procedura
sp_data_source_table_columns
také automaticky provede zplošťování prostřednictvím ovladače PolyBase ODBC pro ovladač MongoDB.Vytvořte externí tabulku.
Pokud použijete rozšíření Data Virtualization pro Azure Data Studio, můžete tento krok přeskočit, protože příkaz CREATE EXTERNAL TABLE se vygeneruje za vás. Pokud chcete schéma poskytnout ručně, zvažte vytvoření externí tabulky pomocí následujícího ukázkového skriptu. Referenční informace naleznete v tématu CREATE EXTERNAL TABLE.
Před spuštěním skriptu ho aktualizujte pro vaše prostředí:
- Aktualizujte pole podle jejich názvu, kolace, a pokud se jedná o kolekce, zadejte název kolekce a pole. V tomto příkladu
friends
je vlastní datový typ. - Aktualizujte umístění. Nastavte název databáze a název tabulky. Všimněte si, že názvy tří částí nejsou povolené, takže je nemůžete vytvořit pro tabulku
system.profile
. Nemůžete také zadat zobrazení, protože z něj nemůže získat metadata. - Aktualizujte zdroj dat názvem zdroje dat, který jste vytvořili v předchozím kroku.
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])
- Aktualizujte pole podle jejich názvu, kolace, a pokud se jedná o kolekce, zadejte název kolekce a pole. V tomto příkladu
Volitelné: Vytvořit statistiku pro externí tabulku.
Pro zajištění optimálního výkonu dotazů doporučujeme vytvářet statistiky pro sloupce externí tabulky, zejména ty, které se používají pro spojení, filtry a agregace.
CREATE STATISTICS statistics_name ON customer (C_CUSTKEY) WITH FULLSCAN;
Důležitý
Jakmile vytvoříte externí zdroj dat, můžete pomocí příkazu CREATE EXTERNAL TABLE vytvořit tabulku s podporou dotazu v daném zdroji.
Příklad najdete v tématu Vytvoření externí tabulky proMongoDB .
Možnosti připojení MongoDB
Informace o možnostech připojení MongoDB najdete v dokumentaci k MongoDB: Formát identifikátoru URI připojovacího řetězce.
Zploštění
U vnořených a opakovaných dat z kolekcí dokumentů MongoDB je povolené zplošťování. Uživatel musí povolit create an external table
a explicitně zadat relační schéma pro kolekce dokumentů MongoDB, které můžou obsahovat vnořená nebo opakovaná data.
Vnořené nebo opakované datové typy JSON budou zploštěné následujícím způsobem:
Objekt: neseřazená kolekce klíč/hodnota uzavřená do složených závorek (vnořená)
SQL Server vytvoří sloupec tabulky pro každý klíč objektu.
- Název sloupce: objectname_keyname
Matice: seřazené hodnoty oddělené čárkami uzavřené v hranatých závorkách (opakované)
SQL Server přidá nový řádek tabulky pro každou položku pole.
SQL Server vytvoří sloupec pro každé pole pro uložení indexu prvku pole.
Název sloupce: arrayname_index
Datový typ: bigint
Existuje několik potenciálních problémů s touto technikou, dvě z nich:
Prázdné opakující se pole efektivně maskuje data obsažená v plochých polích stejného záznamu.
Přítomnost více opakovaných polí může vést k explozi počtu vytvořených řádků.
Sql Server například vyhodnotí kolekci restaurace ukázkové datové sady MongoDB uloženou v nerelačním formátu JSON. Každá restaurace má vnořené pole adresy a pole známek, které bylo přiřazeno v různých dnech. Následující obrázek znázorňuje typickou restauraci s vnořenou adresou a opakovaně vnořenými hodnoceními.
Adresa objektu bude zploštěna následujícím způsobem:
-
restaurant.address.building
pole se stávárestaurant.address_building
polem - Pole
restaurant.address.coord
se změní na vnořenérestaurant.address_coord
- Vnořené pole
restaurant.address.street
se změní narestaurant.address_street
- Vnořené
restaurant.address.zipcode
pole se změní narestaurant.address_zipcode
Prvky pole budou zploštěny takto:
datum známek | stupně_hodnocení | herní skóre |
---|---|---|
1393804800000 | A | 2 |
1378857600000 | A | 6 |
135898560000 | A | 10 |
1322006400000 | A | 9 |
1299715200000 | B | 14 |
Připojení ke službě Cosmos DB
Pomocí rozhraní Mongo API služby Cosmos DB a konektoru Mongo DB PolyBase můžete vytvořit externí tabulku instance Cosmos DB. Toho dosáhnete pomocí stejných kroků uvedených výše. Ujistěte se, že oprávnění databáze, adresa serveru, port a řetězec umístění odpovídají nastavení serveru Cosmos DB.
Příklady
Následující příklad vytvoří externí zdroj dat s následujícími parametry:
Parametr | Hodnota |
---|---|
Jméno | external_data_source_name |
Služba | mongodb0.example.com |
Instance | 27017 |
Sada replikací | myRepl |
TLS | true |
Výpočet posunu dolů | 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);
Další kroky
Další kurzy týkající se vytváření externích zdrojů dat a externích tabulek pro různé zdroje dat najdete v tématu PolyBase Transact-SQL referenční.
Další informace o PolyBase naleznete v tématu Přehled SQL Server PolyBase.