Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pomocí zrcadlené databáze v Microsoft Fabric můžete dotazovat vnořená data JSON zdrojová ze služby 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.
- Pro zrcadlení prostředků infrastruktury musí být nakonfigurovaný účet Azure Cosmos DB for NoSQL. Další informace najdete v požadavcích na účet.
Návod
Doporučujeme použít testovací nebo vývojovou kopii stávajících dat Azure Cosmos DB, která se dají 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
itemspole pomocíOPENJSONpříkazu . Tento dotaz používáOUTER APPLYk 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 PNávod
Při výběru datových typů v
OPENJSONaplikaci 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žšínje, tím pravděpodobnější bude lepší výkon dotazů.V
CROSS APPLYdalší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
Dotazování základních vnořených dat pomocí automatického odvozování schématu
Postupujte podle kroků 1 až 3 v předchozím příkladu. Se stejnou sadou dat můžeme vytvořit dotaz pro zploštění dat, aniž bychom museli explicitně definovat schéma.
Spuštěním tohoto dotazu rozbalte
itemspole bezOPENJSONdefinování schématu. Tím se pole položek zploštějí o jednu úroveň tím, že jednotlivé vnořené objekty rozdělí do nového řádku.SELECT t.name, t.id, t.country, p.* FROM OrdersDB_TestC as t CROSS APPLY OPENJSON(t.items) pSpuštěním tohoto dotazu dále rozbalte
itemspole bezOPENJSONdefinování schématu. Tím se pole položek zploštějí dvěma úrovněmi tím, že každou vlastnost v rámci každého vnořeného objektu rozdělíte do nového řádku.SELECT t.name, t.id, t.country, q.* FROM OrdersDB_TestC as t CROSS APPLY OPENJSON(t.items) q OUTER APPLY OPENJSON(t.items) 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
TestDa znovu vyberte Nový dotaz SQL .Spuštěním tohoto dotazu rozbalte všechny úrovně vnořených dat pomocí
OUTER APPLYzá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 QPoznámka:
Při rozbalování
packagesitemsje reprezentován jako JSON, který může volitelně rozbalit. Vlastnostitemsmá 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 QPoznámka:
Omezení vlastností pro vnořené úrovně se v tomto prostředí dotazů T-SQL nevynucují.