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

Nainstalujte PolyBase na Windows.

Před vytvořením přihlašovacích údajů s vymezeným oborem databáze vytvořte hlavní klíč databáze (DMK) 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 ho 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. Před spuštěním skriptu ho aktualizujte 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čty pushdownu 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.

    Pomocí sp_data_source_objects detekujte schéma kolekce (sloupce) pro kolekce MongoDB, které obsahují pole, a ručně vytvořte externí tabulku. 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 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 jejich názvem a kolací, a pokud jsou součástí kolekcí, zadejte název kolekce a název pole. V tomto příkladu friends je vlastní datový typ.

    • Aktualizujte umístění. Nastavte název databáze a název tabulky. Názvy tří částí nejsou povolené, takže je nemůžete pro system.profile tabulku vytvořit. 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 (
        DATA_SOURCE = [MongoDb],
        LOCATION = 'MyDb.RandomData'
    );
    
  5. Volitelné: Vytvoření statistiky pro externí tabulku

    Pro zajištění optimálního výkonu dotazů můžete 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;
    

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í. Musíte 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é a opakované datové typy JSON jsou 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

Tato technika může způsobit několik problémů, mezi které patří:

  • Prázdné opakované pole maskuje data v plochých polích stejného záznamu.

  • Více opakovaných polí zvyšuje počet vygenerovaný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.

Snímek obrazovky ukazující flattening v MongoDB

Adresy objektů jsou zploštěné takto:

  • restaurant.address.building pole se stává restaurant.address_building polem
  • restaurant.address.coord pole se stává restaurant.address_coord polem
  • restaurant.address.street pole se stává restaurant.address_street polem
  • restaurant.address.zipcode pole se stává restaurant.address_zipcode polem

Známky pole jsou zploštěny následujícím způsobem:

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

K vytvoření externí tabulky pro instanci Cosmos DB můžete použít rozhraní Mongo API a konektor MongoDB PolyBase. Postupujte podle stejných kroků popsaných výše. Ujistěte se, že přihlašovací údaje v oboru databáze, adresa serveru, port a řetězec umístění odpovídají serveru Cosmos DB.

Příklady

Následující příklad vytvoří externí zdroj dat s následujícími parametry:

Parametr Hodnota
název external_data_source_name
Service mongodb0.example.com
příklad 27017
Sada replik myRepl
Protokol TLS true
Výpočet posunu dolů ON
CREATE EXTERNAL DATA SOURCE external_data_source_name
WITH (
    LOCATION = 'mongodb://mongodb0.example.com:27017',
    PUSHDOWN = ON,
    CONNECTION_OPTIONS = 'replicaSet = myRepl; tls = true',
    CREDENTIAL = credential_name
);