Sdílet prostřednictvím


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:

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

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

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

zploštění MongoDB

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í na restaurant.address_street
  • Vnořené restaurant.address.zipcode pole se změní na restaurant.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.