Come fare a: Eseguire query sui dati annidati nei database con mirroring di Microsoft Fabric da Azure Cosmos DB (anteprima)
Usare il database con mirroring in Microsoft Fabric per eseguire query sui dati JSON annidati da Azure Cosmos DB for NoSQL.
Importante
Il mirroring per Azure Cosmos DB attualmente è disponibile in anteprima. I carichi di lavoro di produzione non sono supportati durante l'anteprima. Attualmente sono supportati solo gli account Azure Cosmos DB for NoSQL.
Prerequisiti
- Un account Azure Cosmos DB per NoSQL già presente.
- Se non si ha un abbonamento ad Azure, prova gratuitamente Azure Cosmos DB per NoSQL.
- Se si ha dispone già di un abbonamento ad Azure, creare un nuovo account di Azure Cosmos DB for NoSQL.
- Una capacità di Fabric esistente. Se non si ha una capacità esistente, avviare una versione di valutazione di Fabric.
- L'account Azure Cosmos DB per NoSQL deve essere configurato per il mirroring di Fabric. Per altre informazioni, vedere Requisiti dell'account.
Suggerimento
Durante l'anteprima pubblica, è consigliabile usare una copia di test o sviluppo dei dati di Azure Cosmos DB esistenti che possono essere recuperati rapidamente da un backup.
Creare dati annidati all'interno del database di origine
Creare elementi JSON all'interno dell'account Azure Cosmos DB for NoSQL che contengono diversi livelli di dati JSON annidati.
Nel portale di Azure passare all'account Azure Cosmos DB.
Nel menu della risorsa seleziona Esplora dati.
Usare + Nuovo contenitore per creare un nuovo contenitore. Per questa guida assegnare il nome al contenitore
TestC
. Il nome del database corrispondente è arbitrario.Usare l'opzione + Nuovo elemento più volte per creare e salvare questi cinque articoli 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" }
Configurazione del mirroring e prerequisiti
Configurare il mirroring per il database Azure Cosmos DB for NoSQL. Se non si è certi di come configurare il mirroring, vedere l'esercitazione configurare il database mirror.
Spostarsi sul portale di Fabric.
Creare una nuova connessione e un database con mirroring usando le credenziali dell'account Azure Cosmos DB.
Attendere che la replica finisca lo snapshot iniziale dei dati.
Eseguire query base sui dati annidati
A questo punto, usare l'endpoint di analisi SQL per creare una query in grado di gestire semplici dati JSON annidati.
Passare al database con mirroring nel portale di Fabric.
Passare da Azure Cosmos DB con mirroring all'Endpoint di Analisi SQL.
Aprire il menu contestuale per la tabella test e selezionare Nuova query SQL.
Eseguire questa query per espandere la matrice
items
conOPENJSON
. Questa query usaOUTER APPLY
per includere elementi aggiuntivi che potrebbero non avere una matrice di elementi.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
Suggerimento
Quando si scelgono i tipi di dati in
OPENJSON
, l'uso divarchar(max)
per i tipi stringa potrebbe peggiorare le prestazioni delle query. Usare invecevarchar(n)
doven
potrebbe essere qualsiasi numero. Quanto più basso èn
, tanto più è probabile che si noteranno migliori prestazioni delle query.Usare
CROSS APPLY
nella query successiva per visualizzare solo gli elementi con una matriceitems
.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
Creare dati annidati in profondità
Per eseguire la compilazione su questo esempio di dati annidati, aggiungere un esempio di dati annidati in profondità.
Nel portale di Azure passare all'account Azure Cosmos DB.
Nel menu della risorsa seleziona Esplora dati.
Usare + Nuovo contenitore per creare un nuovo contenitore. Per questa guida assegnare il nome al contenitore
TestD
. Il nome del database corrispondente è arbitrario.Usare l'opzione + Nuovo elemento più volte per creare e salvare questo elemento 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" } }
Eseguire query sui dati annidati in profondità
Infine creare una query T-SQL in grado di trovare i dati annidati in profondità in una stringa JSON.
Aprire il menu contestuale per la tabella
TestD
e selezionare di nuovo Nuova query SQL.Eseguire questa query per espandere tutti i livelli di dati annidati usando
OUTER APPLY
con spedizione.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
Nota
Quando si espande
packages
,items
è rappresentato come JSON, che può essere espansa in modo facoltativo. La proprietàitems
dispone di sottoproprietà come JSON, che può anche essere espansa in modo facoltativo.Eseguire quindi una query che sceglie quando espandere livelli specifici di annidamento.
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
Nota
I limiti delle proprietà per i livelli annidati non vengono applicati in questa esperienza di query T-SQL.