Aide et astuces pour interroger des données imbriquées dans des bases de données Microsoft Fabric en miroir à partir d'Azure Cosmos DB (préversion)
Utilisez la base de données miroir dans Microsoft Fabric pour interroger des données JSON imbriquées provenant d'Azure Cosmos DB for NoSQL.
Important
La mise en miroir d'Azure Cosmos DB est actuellement en préversion. Les charges de travail de production ne sont pas prises en charge dans la préversion. Seuls les comptes Azure Cosmos DB for NoSQL sont pris en charge.
Prérequis
- Un compte Azure Cosmos DB for NoSQL existant.
- Si vous n’avez pas d’abonnement Azure, essayez gratuitement Azure Cosmos DB for NoSQL.
- Si vous disposez d’un abonnement Azure, créez un compte Azure Cosmos DB for SQL.
- Une capacité existante de Microsoft Fabric. Si vous ne disposez d'aucune capacité existante, démarrez une version d'évaluation de Microsoft Fabric.
- Le compte Azure Cosmos DB for NoSQL doit être configuré pour la mise en miroir Microsoft Fabric. Pour plus d'informations, consultez exigences relatives au compte.
Conseil
Pendant la préversion publique, il est recommandé d'utiliser une copie de test ou de développement de vos données Azure Cosmos DB existantes qui peuvent être récupérées rapidement à partir d'une sauvegarde.
Créer des données imbriquées dans la base de données source
Créez des articles JSON dans votre compte Azure Cosmos DB for NoSQL qui contiennent différents niveaux de données JSON imbriquées.
Dans le portail Azure, accédez à votre compte Azure Cosmos DB.
Dans le menu de ressource, sélectionnez Explorateur de données.
Sélectionnez + Nouveau conteneur pour créer un conteneur. Pour ce guide, nommez le conteneur
TestC
. Le nom de la base de données correspondant est arbitraire.Utilisez l'option + Nouvel article plusieurs fois pour créer et enregistrer ces cinq articles 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" }
Configurer la mise en miroir et les prérequis
Configurez la mise en miroir pour la base de données Azure Cosmos DB for NoSQL. Si vous ne savez pas comment configurer la mise en miroir, reportez-vous au tutoriel de configuration de base de données miroir.
Accédez au portail Microsoft Fabric.
Créez une connexion et une base de données miroir à l'aide des identifiants de votre compte Azure Cosmos DB.
Patientez que la réplication termine la capture instantanée initiale des données.
Interroger les données imbriquées de base
À présent, utilisez le point de terminaison d'analytique SQL pour créer une requête qui peut gérer des données JSON imbriquées simples.
Accédez à la base de données miroir dans le portail Microsoft Fabric.
Passez d'Azure Cosmos DB en miroir au point de terminaison d'analytique SQL.
Ouvrez le menu contextuel de la table test et sélectionnez Nouvelle requête SQL.
Exécutez cette requête pour étendre le tableau
items
avecOPENJSON
. Cette requête utiliseOUTER APPLY
pour inclure des articles supplémentaires qui ne disposent peut-être pas de tableau d'articles.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
Conseil
Lorsque vous choisissez les types de données dans
OPENJSON
, l'utilisation devarchar(max)
pour les types de chaîne peut aggraver les performances de la requête. À la place, utilisezvarchar(n)
oùn
peut être n'importe quel nombre. Plusn
est bas, plus les performances de la requêtes pourraient s'améliorer.Utilisez
CROSS APPLY
dans la requête suivante pour afficher uniquement les articles avec un tableauitems
.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
Créer des données profondément imbriquées
Pour compléter cet exemple de données imbriquées, ajoutons un exemple de données profondément imbriquées.
Dans le portail Azure, accédez à votre compte Azure Cosmos DB.
Dans le menu de ressource, sélectionnez Explorateur de données.
Sélectionnez + Nouveau conteneur pour créer un conteneur. Pour ce guide, nommez le conteneur
TestD
. Le nom de la base de données correspondant est arbitraire.Utilisez l'option + Nouvel élément plusieurs fois pour créer et enregistrer cet article 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" } }
Interroger des données profondément imbriquées
Enfin, créez une requête T-SQL qui peut trouver des données profondément imbriquées dans une chaîne JSON.
Ouvrez le menu contextuel de la table
TestD
et sélectionnez Nouvelle requête SQL.Exécutez cette requête pour étendre tous les niveaux de données imbriquées à l'aide de consignations
OUTER APPLY
.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
Remarque
Lorsque vous étendez
packages
,items
est représenté en tant que JSON, qui peut éventuellement s'étendre. La propriétéitems
dispose de sous-propriétés comme JSOn, qui peuvent également être étendues.Enfin, exécutez une requête qui choisit quand étendre des niveaux spécifiques d'imbrication.
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
Remarque
Les limites de propriétés pour les niveaux imbriqués ne sont pas appliquées dans cette expérience de requête T-SQL.