Anvisningar: Fråga efter kapslade data i Microsoft Fabric-speglade databaser från Azure Cosmos DB (förhandsversion)
Använd den speglade databasen i Microsoft Fabric för att fråga kapslade JSON-data från Azure Cosmos DB för NoSQL.
Viktigt!
Spegling för Azure Cosmos DB är för närvarande i förhandsversion. Produktionsarbetsbelastningar stöds inte under förhandsversionen. För närvarande stöds endast Azure Cosmos DB för NoSQL-konton.
Förutsättningar
- Ett befintligt Azure Cosmos DB för NoSQL-konto.
- Om du inte har en Azure-prenumeration kan du prova Azure Cosmos DB utan kostnad för NoSQL.
- Om du har en befintlig Azure-prenumeration skapar du ett nytt Azure Cosmos DB för NoSQL-konto.
- En befintlig infrastrukturkapacitet. Om du inte har någon befintlig kapacitet startar du en fabric-utvärderingsversion.
- Azure Cosmos DB för NoSQL-kontot måste konfigureras för infrastrukturspegling. Mer information finns i kontokrav.
Dricks
Under den offentliga förhandsversionen rekommenderar vi att du använder en test- eller utvecklingskopia av dina befintliga Azure Cosmos DB-data som kan återställas snabbt från en säkerhetskopia.
Skapa kapslade data i källdatabasen
Skapa JSON-objekt i ditt Azure Cosmos DB for NoSQL-konto som innehåller olika nivåer av kapslade JSON-data.
Gå till ditt Azure Cosmos DB-konto i Azure Portal.
Välj Datautforskaren på resursmenyn.
Använd + Ny container för att skapa en ny container. I den här guiden namnger du containern
TestC
. Motsvarande databasnamn är godtyckligt.Använd alternativet + Nytt objekt flera gånger för att skapa och spara dessa fem JSON-objekt.
{ "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" }
Konfigurera spegling och krav
Konfigurera spegling för Azure Cosmos DB för NoSQL-databasen. Om du är osäker på hur du konfigurerar spegling kan du läsa självstudien konfigurera speglad databas.
Gå till Infrastrukturportalen.
Skapa en ny anslutning och speglad databas med autentiseringsuppgifterna för ditt Azure Cosmos DB-konto.
Vänta tills replikeringen har slutfört den första ögonblicksbilden av data.
Fråga efter grundläggande kapslade data
Använd nu SQL-analysslutpunkten för att skapa en fråga som kan hantera enkla kapslade JSON-data.
Navigera till den speglade databasen i Fabric-portalen.
Växla från Speglad Azure Cosmos DB till SQL-analysslutpunkt.
Öppna snabbmenyn för testtabellen och välj Ny SQL-fråga.
Kör den här frågan för att expandera matrisen
items
medOPENJSON
. Den här frågan användsOUTER APPLY
för att inkludera extra objekt som kanske inte har en objektmatris.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
Dricks
När du väljer datatyperna i
OPENJSON
kan användning förvarchar(max)
strängtyper försämra frågeprestanda.varchar(n)
Använd whern
kan i stället vara valfritt tal. Ju lägren
är, desto mer sannolikt ser du bättre frågeprestanda.Använd
CROSS APPLY
i nästa fråga om du bara vill visa objekt med enitems
matris.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
Skapa djupt kapslade data
Om du vill bygga vidare på det här kapslade dataexemplet ska vi lägga till ett djupt kapslat dataexempel.
Gå till ditt Azure Cosmos DB-konto i Azure Portal.
Välj Datautforskaren på resursmenyn.
Använd + Ny container för att skapa en ny container. I den här guiden namnger du containern
TestD
. Motsvarande databasnamn är godtyckligt.Använd alternativet + Nytt objekt flera gånger för att skapa och spara det här JSON-objektet.
{ "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" } }
Fråga efter djupt kapslade data
Skapa slutligen en T-SQL-fråga som kan hitta data djupt kapslade i en JSON-sträng.
Öppna snabbmenyn för
TestD
tabellen och välj Ny SQL-fråga igen.Kör den här frågan för att expandera alla nivåer av kapslade data med hjälp av
OUTER APPLY
sändning.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
Kommentar
När du expanderar
packages
items
, representeras som JSON, som kan expanderas. Egenskapenitems
har underegenskaper som JSOn som också kan expanderas.Kör slutligen en fråga som väljer när specifika kapslingsnivåer ska expanderas.
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
Kommentar
Egenskapsgränser för kapslade nivåer tillämpas inte i den här T-SQL-frågeupplevelsen.