Del via


Slik gjør du det: Spørre nestede data i Microsoft Fabric speilede databaser fra Azure Cosmos DB (forhåndsvisning)

Bruk den speilede databasen i Microsoft Fabric til å spørre nestede JSON-data hentet fra Azure Cosmos DB for NoSQL.

Viktig

Speiling for Azure Cosmos DB er for øyeblikket i forhåndsversjon. Produksjonsarbeidsbelastninger støttes ikke under forhåndsvisning. For øyeblikket støttes bare Azure Cosmos DB for NoSQL-kontoer.

Forutsetning

Tips

Under den offentlige forhåndsvisningen anbefales det å bruke en test- eller utviklingskopi av eksisterende Azure Cosmos DB-data som raskt kan gjenopprettes fra en sikkerhetskopi.

Opprette nestede data i kildedatabasen

Opprett JSON-elementer i Azure Cosmos DB for NoSQL-kontoen som inneholder ulike nivåer av nestede JSON-data.

  1. Gå til Azure Cosmos DB-kontoen i Azure-portalen.

  2. Velg Datautforsker fra ressursmenyen.

  3. Bruk + Ny beholder til å opprette en ny beholder. Gi navn til beholderen TestCfor denne veiledningen. Det tilsvarende databasenavnet er vilkårlig.

  4. Bruk alternativet + Nytt element flere ganger for å opprette og lagre disse fem JSON-elementene.

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

Oppsett av speiling og forutsetninger

Konfigurer speiling for Azure Cosmos DB for NoSQL-databasen. Hvis du er usikker på hvordan du konfigurerer speiling, kan du se den konfigurer speilvendte databaseopplæringen.

  1. Gå til Stoff-portalen.

  2. Opprett en ny tilkobling og speilvendt database ved hjelp av Legitimasjonen for Azure Cosmos DB-kontoen.

  3. Vent til replikering fullfører det første øyeblikksbildet av data.

Spørring av grunnleggende nestede data

Bruk nå SQL Analytics-endepunktet til å opprette en spørring som kan håndtere enkle nestede JSON-data.

  1. Gå til den speilvendte databasen i Fabric-portalen.

  2. Bytt fra Mirrored Azure Cosmos DB til SQL Analytics-endepunkt.

    Skjermbilde av velgeren for å bytte mellom elementer i Stoff-portalen.

  3. Åpne hurtigmenyen for testtabellen, og velg Ny SQL-spørring.

  4. Kjør denne spørringen for å utvide matrisen items med OPENJSON. Denne spørringen bruker OUTER APPLY til å inkludere ekstra elementer som kanskje ikke har en elementmatrise.

    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
    

    Tips

    Når du velger datatypene i OPENJSON, kan det å bruke varchar(max) for strengtyper forverre spørringsytelsen. Bruk wher varchar(n) kan i stedet n være et hvilket som helst tall. Jo lavere n er, jo mer sannsynlig vil du se bedre spørringsytelse.

  5. Bruk CROSS APPLY den neste spørringen til bare å vise elementer med en matrise 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 
    

Opprett dypt nestede data

Hvis du vil bygge videre på dette nestede dataeksemplet, kan vi legge til et dypt nestet dataeksempel.

  1. Gå til Azure Cosmos DB-kontoen i Azure-portalen.

  2. Velg Datautforsker fra ressursmenyen.

  3. Bruk + Ny beholder til å opprette en ny beholder. Gi navn til beholderen TestDfor denne veiledningen. Det tilsvarende databasenavnet er vilkårlig.

  4. Bruk alternativet + Nytt element flere ganger for å opprette og lagre dette JSON-elementet.

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

Spør dypt nestede data

Til slutt kan du opprette en T-SQL-spørring som kan finne data dypt nestet i en JSON-streng.

  1. Åpne hurtigmenyen for TestD tabellen, og velg Ny SQL-spørring på nytt.

  2. Kjør denne spørringen for å utvide alle nivåer av nestede data ved hjelp av OUTER APPLY 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 
    

    Merk

    Når du utvider packages, items representeres som JSON, som eventuelt kan utvides. Egenskapen items har delegenskaper som JSOn, som også kan utvides.

  3. Til slutt kjører du en spørring som velger når du vil utvide bestemte nestenivåer.

    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 
    

    Merk

    Egenskapsgrenser for nestede nivåer håndheves ikke i denne T-SQL-spørringsopplevelsen.