Postupy: Dotazování vnořených dat v databázích Microsoft Fabric zrcadlených z Azure Cosmos DB (Preview)
Pomocí zrcadlené databáze v Microsoft Fabric můžete dotazovat vnořená data JSON zdrojová ze služby Azure Cosmos DB for NoSQL.
Důležité
Zrcadlení služby Azure Cosmos DB je aktuálně ve verzi Preview. Produkční úlohy nejsou ve verzi Preview podporované. V současné době se podporují jenom účty Azure Cosmos DB for NoSQL.
Požadavky
- Existující účet Azure Cosmos DB for NoSQL.
- Pokud nemáte předplatné Azure, vyzkoušejte službu Azure Cosmos DB pro NoSQL zdarma.
- Pokud máte existující předplatné Azure, vytvořte nový účet Azure Cosmos DB for NoSQL.
- Existující kapacita prostředků infrastruktury. Pokud nemáte existující kapacitu, spusťte zkušební verzi Fabric.
- Povolte zrcadlení v tenantovi nebo pracovním prostoru Fabric. Pokud tato funkce ještě není povolená, povolte zrcadlení v tenantovi Fabric.
- Pro zrcadlení prostředků infrastruktury musí být nakonfigurovaný účet Azure Cosmos DB for NoSQL. Další informace najdete v požadavcích na účet.
Tip
Ve verzi Public Preview se doporučuje použít testovací nebo vývojovou kopii stávajících dat Azure Cosmos DB, která je možné rychle obnovit ze zálohy.
Vytvoření vnořených dat ve zdrojové databázi
Vytvořte položky JSON v účtu Azure Cosmos DB for NoSQL, které obsahují různé úrovně vnořených dat JSON.
Na webu Azure Portal přejděte ke svému účtu služby Azure Cosmos DB.
V nabídce prostředků vyberte Průzkumník dat.
K vytvoření nového kontejneru použijte + Nový kontejner. Pro tuto příručku pojmenujte kontejner
TestC
. Odpovídající název databáze je libovolný.Pomocí možnosti + Nová položka několikrát vytvořte a uložte tyto pět položek JSON.
{ "id": "123-abc-xyz", "name": "A 13", "country": "USA", "items": [ { "purchased": "11/23/2022", "order_id": "3432-2333-2234-3434", "item_description": "item1" }, { "purchased": "01/20/2023", "order_id": "3431-3454-1231-8080", "item_description": "item2" }, { "purchased": "02/20/2023", "order_id": "2322-2435-4354-2324", "item_description": "item3" } ] }
{ "id": "343-abc-def", "name": "B 22", "country": "USA", "items": [ { "purchased": "01/20/2023", "order_id": "2431-2322-1545-2322", "item_description": "book1" }, { "purchased": "01/21/2023", "order_id": "3498-3433-2322-2320", "item_description": "book2" }, { "purchased": "01/24/2023", "order_id": "9794-8858-7578-9899", "item_description": "book3" } ] }
{ "id": "232-abc-x43", "name": "C 13", "country": "USA", "items": [ { "purchased": "04/03/2023", "order_id": "9982-2322-4545-3546", "item_description": "clothing1" }, { "purchased": "05/20/2023", "order_id": "7989-9989-8688-3446", "item_description": "clothing2" }, { "purchased": "05/27/2023", "order_id": "9898-2322-1134-2322", "item_description": "clothing3" } ] }
{ "id": "677-abc-yuu", "name": "D 78", "country": "USA" }
{ "id": "979-abc-dfd", "name": "E 45", "country": "USA" }
Nastavení zrcadlení a požadavků
Nakonfigurujte zrcadlení pro databázi Azure Cosmos DB for NoSQL. Pokud si nejste jistí, jak nakonfigurovat zrcadlení, projděte si kurz konfigurace zrcadlené databáze.
Přejděte na portál Fabric.
Vytvořte nové připojení a zrcadlenou databázi pomocí přihlašovacích údajů účtu služby Azure Cosmos DB.
Počkejte, až replikace dokončí počáteční snímek dat.
Dotazování základních vnořených dat
Teď pomocí koncového bodu SQL Analytics vytvořte dotaz, který dokáže zpracovat jednoduchá vnořená data JSON.
Na portálu Fabric přejděte do zrcadlené databáze.
Přepněte ze zrcadlené služby Azure Cosmos DB na koncový bod analýzy SQL.
Otevřete místní nabídku pro testovací tabulku a vyberte Nový dotaz SQL.
Spuštěním tohoto dotazu rozbalte
items
pole pomocíOPENJSON
příkazu . Tento dotaz používáOUTER APPLY
k zahrnutí dalších položek, které nemusí mít pole položek.SELECT t.name, t.id, t.country, P.purchased, P.order_id, P.item_description FROM OrdersDB_TestC AS t OUTER APPLY OPENJSON(t.items) WITH ( purchased datetime '$.purchased', order_id varchar(100) '$.order_id', item_description varchar(200) '$.item_description' ) as P
Tip
Při výběru datových typů v
OPENJSON
aplikaci by použitívarchar(max)
pro typy řetězců mohlo zhoršit výkon dotazů. Místo toho může být libovolná číslice.varchar(n)
n
Čím nižšín
je, tím pravděpodobnější bude lepší výkon dotazů.V
CROSS APPLY
dalším dotazu slouží pouze k zobrazení položek s polemitems
.SELECT t.name, t.id, t.country, P.purchased, P.order_id, P.item_description FROM OrdersDB_TestC as t CROSS APPLY OPENJSON(t.items) WITH ( purchased datetime '$.purchased', order_id varchar(100) '$.order_id', item_description varchar(200) '$.item_description' ) as P
Vytváření hluboko vnořených dat
Abychom mohli stavět na tomto příkladu vnořených dat, pojďme přidat hluboko vnořený příklad dat.
Na webu Azure Portal přejděte ke svému účtu služby Azure Cosmos DB.
V nabídce prostředků vyberte Průzkumník dat.
K vytvoření nového kontejneru použijte + Nový kontejner. Pro tuto příručku pojmenujte kontejner
TestD
. Odpovídající název databáze je libovolný.Pomocí možnosti + Nová položka několikrát vytvořte a uložte tuto položku JSON.
{ "id": "eadca09b-e618-4090-a25d-b424a26c2361", "entityType": "Package", "packages": [ { "packageid": "fiwewsb-f342-jofd-a231-c2321", "storageTemperature": "69", "highValue": true, "items": [ { "id": "1", "name": "Item1", "properties": { "weight": "2", "isFragile": "no" } }, { "id": "2", "name": "Item2", "properties": { "weight": "4", "isFragile": "yes" } } ] }, { "packageid": "d24343-dfdw-retd-x414-f34345", "storageTemperature": "78", "highValue": false, "items": [ { "id": "3", "name": "Item3", "properties": { "weight": "12", "isFragile": "no" } }, { "id": "4", "name": "Item4", "properties": { "weight": "12", "isFragile": "no" } } ] } ], "consignment": { "consignmentId": "ae21ebc2-8cfc-4566-bf07-b71cdfb37fb2", "customer": "Humongous Insurance", "deliveryDueDate": "2020-11-08T23:38:50.875258Z" } }
Dotazování hluboce vnořených dat
Nakonec vytvořte dotaz T-SQL, který dokáže najít data hluboko vnořená do řetězce JSON.
Otevřete místní nabídku tabulky
TestD
a znovu vyberte Nový dotaz SQL.Spuštěním tohoto dotazu rozbalte všechny úrovně vnořených dat pomocí
OUTER APPLY
zásilky.SELECT P.id, R.packageId, R.storageTemperature, R.highValue, G.id, G.name, H.weight, H.isFragile, Q.consignmentId, Q.customer, Q.deliveryDueDate FROM OrdersDB_TestD as P CROSS APPLY OPENJSON(P.packages) WITH ( packageId varchar(100) '$.packageid', storageTemperature INT '$.storageTemperature', highValue varchar(100) '$.highValue', items nvarchar(MAX) AS JSON ) as R OUTER APPLY OPENJSON (R.items) WITH ( id varchar(100) '$.id', name varchar(100) '$.name', properties nvarchar(MAX) as JSON ) as G OUTER APPLY OPENJSON(G.properties) WITH ( weight INT '$.weight', isFragile varchar(100) '$.isFragile' ) as H OUTER APPLY OPENJSON(P.consignment) WITH ( consignmentId varchar(200) '$.consignmentId', customer varchar(100) '$.customer', deliveryDueDate Date '$.deliveryDueDate' ) as Q
Poznámka:
Při rozbalování
packages
items
je reprezentován jako JSON, který může volitelně rozbalit. Vlastnostitems
má dílčí vlastnosti jako JSOn, které také mohou volitelně rozbalit.Nakonec spusťte dotaz, který zvolí, kdy se mají rozšířit konkrétní úrovně vnoření.
SELECT P.id, R.packageId, R.storageTemperature, R.highValue, R.items, Q.consignmentId, Q.customer, Q.deliveryDueDate FROM OrdersDB_TestD as P CROSS APPLY OPENJSON(P.packages) WITH ( packageId varchar(100) '$.packageid', storageTemperature INT '$.storageTemperature', highValue varchar(100) '$.highValue', items nvarchar(MAX) AS JSON ) as R OUTER APPLY OPENJSON(P.consignment) WITH ( consignmentId varchar(200) '$.consignmentId', customer varchar(100) '$.customer', deliveryDueDate Date '$.deliveryDueDate' ) as Q
Poznámka:
Omezení vlastností pro vnořené úrovně se v tomto prostředí dotazů T-SQL nevynucují.