Dotazování cosmos DB pomocí Synapse SQL
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.