Del via


Sådan forespørger du om indlejrede data i spejlede Microsoft Fabric-databaser fra Azure Cosmos DB (prøveversion)

Brug den spejlede database i Microsoft Fabric til at forespørge om indlejrede JSON-data fra Azure Cosmos DB til NoSQL.

Vigtigt

Spejling til Azure Cosmos DB er i øjeblikket en prøveversion. Produktionsarbejdsbelastninger understøttes ikke under prøveversionen. I øjeblikket understøttes kun Azure Cosmos DB for NoSQL-konti.

Forudsætninger

Tip

I den offentlige prøveversion anbefales det at bruge en test- eller udviklingskopi af dine eksisterende Azure Cosmos DB-data, der hurtigt kan gendannes fra en sikkerhedskopi.

Opret indlejrede data i kildedatabasen

Opret JSON-elementer i din Azure Cosmos DB for NoSQL-konto, der indeholder forskellige niveauer af indlejrede JSON-data.

  1. Gå til din Azure Cosmos DB-konto i Azure-portal.

  2. Vælg Data Explorer i ressourcemenuen.

  3. Brug + Ny objektbeholder til at oprette en ny objektbeholder. I denne vejledning skal du navngive objektbeholderen TestC. Det tilsvarende databasenavn er vilkårligt.

  4. Brug indstillingen + Nyt element flere gange til at oprette og gemme disse fem JSON-elementer.

    {
      "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"
    }
    

Konfigurer spejling og forudsætninger

Konfigurer spejling for Azure Cosmos DB for NoSQL-databasen. Hvis du er usikker på, hvordan du konfigurerer spejling, skal du se selvstudiet konfigurer spejlvendt database.

  1. Gå til Fabric-portalen.

  2. Opret en ny forbindelse og en spejlet database ved hjælp af legitimationsoplysningerne til din Azure Cosmos DB-konto.

  3. Vent på, at replikeringen afslutter det første snapshot af data.

Forespørg om grundlæggende indlejrede data

Brug nu SQL Analytics-slutpunktet til at oprette en forespørgsel, der kan håndtere enkle indlejrede JSON-data.

  1. Gå til den spejlede database på Fabric-portalen.

  2. Skift fra Mirrored Azure Cosmos DB til SQL Analytics-slutpunktet.

    Skærmbillede af vælgeren til at skifte mellem elementer på Fabric-portalen.

  3. Åbn genvejsmenuen for testtabellen, og vælg Ny SQL-forespørgsel.

  4. Kør denne forespørgsel for at udvide matrixen items med OPENJSON. Denne forespørgsel bruger OUTER APPLY til at inkludere ekstra elementer, der muligvis ikke har en elementmatrix.

    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
    

    Tip

    Når du vælger datatyperne i OPENJSON, kan brugen af varchar(max) til strengtyper forværre forespørgslens ydeevne. varchar(n) Brug wher n kan i stedet være et vilkårligt tal. Jo lavere n er, jo mere sandsynligt er det, at du får vist en bedre ydeevne af forespørgsler.

  5. Bruges CROSS APPLY i den næste forespørgsel til kun at vise elementer med en items matrix.

    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 
    

Opret dybt indlejrede data

Lad os tilføje et dybt indlejret dataeksempel for at bygge videre på dette indlejrede dataeksempel.

  1. Gå til din Azure Cosmos DB-konto i Azure-portal.

  2. Vælg Data Explorer i ressourcemenuen.

  3. Brug + Ny objektbeholder til at oprette en ny objektbeholder. I denne vejledning skal du navngive objektbeholderen TestD. Det tilsvarende databasenavn er vilkårligt.

  4. Brug indstillingen + Nyt element flere gange til at oprette og gemme dette JSON-element.

    {
      "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"
      }
    }
    

Forespørg om dybt indlejrede data

Endelig skal du oprette en T-SQL-forespørgsel, der kan finde data dybt indlejret i en JSON-streng.

  1. Åbn genvejsmenuen for tabellen, TestD og vælg Ny SQL-forespørgsel igen.

  2. Kør denne forespørgsel for at udvide alle niveauer af indlejrede data ved hjælp af OUTER APPLY med forsendelse.

    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 
    

    Bemærk

    Når du udvider packages, items vises som JSON, som eventuelt kan udvides. Egenskaben items har underegenskaber som JSOn, som også kan udvides.

  3. Til sidst skal du køre en forespørgsel, der vælger, hvornår bestemte indlejringsniveauer skal udvides.

    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 
    

    Bemærk

    Egenskabsgrænser for indlejrede niveauer gennemtvinges ikke i denne T-SQL-forespørgselsoplevelse.