Dotazování cosmos DB pomocí Synapse SQL

Dokončeno

Kromě použití fondu Sparku můžete také dotazovat analytický kontejner Azure Cosmos DB pomocí integrovaného bezserverového fondu SQL ve službě Azure Synapse Analytics. K tomu se můžete pomocí OPENROWSET funkce SQL připojit k propojené službě pro vaši databázi Azure Cosmos DB.

Použití OPENROWSET s ověřovacím klíčem

Ve výchozím nastavení se přístup k účtu služby Azure Cosmos DB ověřuje ověřovacím klíčem. Tento klíč můžete použít jako součást připojovací řetězec v OPENROWSET příkazu pro připojení prostřednictvím propojené služby z fondu SQL, jak je znázorněno v následujícím příkladu:

SELECT *
FROM OPENROWSET(​
    'CosmosDB',
    'Account=my-cosmos-db;Database=my-db;Key=abcd1234....==',
    [my-container]) AS products_data

Tip

Primární a sekundární klíč pro váš účet Cosmos DB najdete na stránce Klíče na webu Azure Portal.

Výsledky tohoto dotazu můžou vypadat nějak takto, včetně metadat a polí definovaných aplikací z položek v kontejneru Azure Cosmos DB:

_rid _ts productID productName ID _etag
mjMaAL...== 1655414791 123 Widget 7248f072-11c3-42b1-a368-... 54004b09-0000-2300-...
mjMaAL...== 1655414829 124 Wotsit dc33131c-65c7-421a-a0f7-... 5400ca09-0000-2300-...
mjMaAL...== 1655414835 125 Thingumy ce22351d-78c7-428a-a1h5-... 5400ca09-0000-2300-...
... ... ... ... ... ...

Data se načítají z analytického úložiště a dotaz nemá vliv na provozní úložiště.

Použití OPENROWSET s přihlašovacími údaji

Místo zahrnutí ověřovacího klíče do každého volání OPENROWSET můžete definovat přihlašovací údaje , které zapouzdří ověřovací informace pro váš účet Cosmos DB, a použít přihlašovací údaje v následných dotazech. Pokud chcete vytvořit přihlašovací údaje, použijte CREATE CREDENTIAL příkaz, jak je znázorněno v tomto příkladu:

 CREATE CREDENTIAL my_credential
 WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
 SECRET = 'abcd1234....==';

S použitím přihlašovacích údajů ho můžete použít ve OPENROWSET funkci, jako je tato:

SELECT *
FROM OPENROWSET(​PROVIDER = 'CosmosDB',
                CONNECTION = 'Account=my-cosmos-db;Database=my-db',
                OBJECT = 'my-container',
                SERVER_CREDENTIAL = 'my_credential'
) AS products_data

Výsledky znovu obsahují metadata a pole definovaná aplikací z analytického úložiště:

_rid _ts productID productName ID _etag
mjMaAL...== 1655414791 123 Widget 7248f072-11c3-42b1-a368-... 54004b09-0000-2300-...
mjMaAL...== 1655414829 124 Wotsit dc33131c-65c7-421a-a0f7-... 5400ca09-0000-2300-...
mjMaAL...== 1655414835 125 Thingumy ce22351d-78c7-428a-a1h5-... 5400ca09-0000-2300-...
... ... ... ... ... ...

Určení schématu

Syntaxe OPENROWSET obsahuje WITH klauzuli, kterou můžete použít k definování schématu pro výslednou sadu řádků. Můžete ho použít k určení jednotlivých polí a přiřazení datových typů, jak je znázorněno v následujícím příkladu:

 SELECT *
 FROM OPENROWSET(​PROVIDER = 'CosmosDB',
                 CONNECTION = 'Account=my-cosmos-db;Database=my-db',
                 OBJECT = 'my-container',
                 SERVER_CREDENTIAL = 'my_credential'
 )
 WITH (
    productID INT,
    productName VARCHAR(20)
 ) AS products_data

V takovém případě za předpokladu, že pole v analytickém úložišti obsahují IDproduktu a productName, výsledná sada řádků bude vypadat podobně jako v následující tabulce:

productID productName
123 Widget
124 Wotsit
125 Thingumy
... ...

V klauzuli (například) můžete samozřejmě zadat názvy SELECT jednotlivých sloupců, SELECT productID, productName ...takže tato možnost určit jednotlivé sloupce může vypadat jako omezené použití. Zvažte ale případy, kdy zdrojové dokumenty JSON uložené v provozním úložišti obsahují více úrovní polí, jak je znázorněno v následujícím příkladu:

{
    "productID": 126,
    "productName": "Sprocket",
    "supplier": {
        "supplierName": "Contoso",
        "supplierPhone": "555-123-4567"
    }
    "id": "62588f072-11c3-42b1-a738-...",
    "_rid": "mjMaAL...==",
    ...
}

Klauzule WITH podporuje zahrnutí explicitních cest JSON, které umožňují zpracovávat vnořená pole a přiřazovat aliasy k názvům polí, jak je znázorněno v tomto příkladu:

 SELECT *
 FROM OPENROWSET(​PROVIDER = 'CosmosDB',
                 CONNECTION = 'Account=my-cosmos-db;Database=my-db',
                 OBJECT = 'my-container',
                 SERVER_CREDENTIAL = 'my_credential'
 )
 WITH (
    ProductNo INT '$.productID',
    ProductName VARCHAR(20) '$.productName',
    Supplier VARCHAR(20) '$.supplier.supplierName',
    SupplierPhoneNo VARCHAR(15) '$.supplier.supplierPhone'
 ) AS products_data

Výsledky tohoto dotazu by obsahovaly následující řádek pro produkt 126:

ProductNo ProductName Zásobitel Dodavatel Telefon No
126 Pastorek Contoso 555-123-4567

Vytvoření zobrazení v databázi

Pokud potřebujete často dotazovat stejná data nebo potřebujete použít nástroje pro vytváření sestav a vizualizaci, které spoléhají na SELECT příkazy, které funkci neobsahují OPENROWSET , můžete data abstraktovat pomocí zobrazení . Pokud chcete vytvořit zobrazení, měli byste vytvořit novou databázi, ve které ji chcete definovat (uživatelsky definovaná zobrazení v hlavní databázi nejsou podporovaná), jak je znázorněno v následujícím příkladu:

CREATE DATABASE sales_db
   COLLATE Latin1_General_100_BIN2_UTF8;
 GO;

 USE sales_db;
 GO;

 CREATE VIEW products
 AS
 SELECT *
 FROM OPENROWSET(​PROVIDER = 'CosmosDB',
                 CONNECTION = 'Account=my-cosmos-db;Database=my-db',
                 OBJECT = 'my-container',
                 SERVER_CREDENTIAL = 'my_credential'
 )
 WITH (
    ProductNo INT '$.productID',
    ProductName VARCHAR(20) '$.productName',
    Supplier VARCHAR(20) '$.supplier.supplierName',
    SupplierPhoneNo VARCHAR(15) '$.supplier.supplierPhone'
 ) AS products_data
 GO

Tip

Při vytváření databáze, která bude přistupovat k datům ve službě Cosmos DB, je nejlepší použít kolaci založenou na kódování UTF-8, abyste zajistili kompatibilitu s řetězci ve službě Cosmos DB.

Po vytvoření zobrazení můžou uživatelé a klientské aplikace dotazovat stejně jako jakékoli jiné zobrazení nebo tabulku SQL:

SELECT * FROM products;

Důležité informace o bezserverových fondech SQL a službě Azure Cosmos DB

Při plánování použití bezserverového fondu SQL k dotazování dat v analytickém úložišti Azure Cosmos DB zvažte následující osvědčené postupy:

  • Zřiďte analytické úložiště Azure Cosmos DB a všechny klientské aplikace (například Microsoft Power BI) ve stejné oblasti jako bezserverový fond SQL.

    Kontejnery Azure Cosmos DB je možné replikovat do několika oblastí. Pokud máte kontejner s více oblastmi, můžete v připojovací řetězec OPENROWSET zadat region parametr, aby se zajistilo, že se dotazy posílají do konkrétní regionální repliky kontejneru.

  • Při práci se sloupci řetězců použijte funkci OPENROWSET s explicitní klauzulí WITH a zadejte odpovídající délku dat pro řetězcová data.