Partager via


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

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.

  1. Dans le portail Azure, accédez à votre compte Azure Cosmos DB.

  2. Dans le menu de ressource, sélectionnez Explorateur de données.

  3. 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.

  4. 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.

  1. Accédez au portail Microsoft Fabric.

  2. Créez une connexion et une base de données miroir à l'aide des identifiants de votre compte Azure Cosmos DB.

  3. 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.

  1. Accédez à la base de données miroir dans le portail Microsoft Fabric.

  2. Passez d'Azure Cosmos DB en miroir au point de terminaison d'analytique SQL.

    Capture d'écran du sélecteur pour basculer entre les éléments dans le portail Microsoft Fabric.

  3. Ouvrez le menu contextuel de la table test et sélectionnez Nouvelle requête SQL.

  4. Exécutez cette requête pour étendre le tableau items avec OPENJSON. Cette requête utilise OUTER 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 de varchar(max) pour les types de chaîne peut aggraver les performances de la requête. À la place, utilisez varchar(n)n peut être n'importe quel nombre. Plus n est bas, plus les performances de la requêtes pourraient s'améliorer.

  5. Utilisez CROSS APPLY dans la requête suivante pour afficher uniquement les articles avec un tableau items.

    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.

  1. Dans le portail Azure, accédez à votre compte Azure Cosmos DB.

  2. Dans le menu de ressource, sélectionnez Explorateur de données.

  3. 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.

  4. 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.

  1. Ouvrez le menu contextuel de la table TestD et sélectionnez Nouvelle requête SQL.

  2. 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.

  3. 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.