Jaa kautta


Miten: Kysy sisäkkäistä dataa Microsoft Fabricin peilatuista tietokannoista Azure Cosmos DB:stä

Microsoft Fabricin peilatun tietokannan avulla voit tehdä kyselyjä sisäkkäisistä JSON-tiedoista, jotka on peräisin Azure Cosmos DB for NoSQL:stä.

Prerequisites

Juomaraha

On suositeltavaa käyttää testi- tai kehityskopiota olemassa olevasta Azure Cosmos DB -datastasi, joka voidaan palauttaa nopeasti varmuuskopiosta.

Sisäkkäisten tietojen luominen lähdetietokantaan

Luo Azure Cosmos DB for NoSQL -tilillesi JSON-kohteita, jotka sisältävät eritasoisia sisäkkäisiä JSON-tietoja.

  1. Siirry Azure Cosmos DB -tilillesi Azure-portaalissa.

  2. Valitse resurssivalikosta Resurssienhallinta .

  3. Käytä + Uusi säilö luodaksesi uuden säilön. Nimeä tätä opasta varten säilö TestC. Vastaava tietokannan nimi on mielivaltainen.

  4. Käytä + Uusi kohde -vaihtoehtoa useita kertoja näiden viiden JSON-kohteen luomiseen ja tallentamiseen .

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

Määritä peilaus ja edellytykset

Määritä Azure Cosmos DB for NoSQL -tietokannan peilaus. Jos et ole varma, miten peilaus määritetään, katso peilatun tietokannan määrittämisen opetusohjelma.

  1. Siirry Fabric-portaaliin.

  2. Luo uusi yhteys ja peilattu tietokanta käyttämällä Azure Cosmos DB -tilisi tunnistetietoja.

  3. Odota, että replikointi viimeistelee tietojen alkuperäisen tilannevedoksen.

Sisäkkäisten perustietojen kysely

Luo nyt SQL-analytiikan päätepisteen avulla kysely, joka pystyy käsittelemään yksinkertaisia sisäkkäisiä JSON-tietoja.

  1. Siirry peilattuun tietokantaan Fabric-portaalissa.

  2. Vaihda peilatusta Azure Cosmos DB:stäSQL-analytiikan päätepisteeseen.

    Näyttökuva valitsimesta, jolla voit vaihtaa Fabric-portaalin kohteiden välillä.

  3. Avaa testitaulukon pikavalikko ja valitse Uusi SQL-kysely.

  4. Suorita tämä kysely laajentaaksesi taulukkoa items komennolla OPENJSON. Tämä kysely OUTER APPLY käyttää ylimääräisten kohteiden sisällyttämistä, joissa ei ehkä ole items-matriisia.

    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
    

    Juomaraha

    Kun valitset tietotyyppejä kohdassa OPENJSON, merkkijonotyyppien käyttäminen varchar(max) voi heikentää kyselyn suorituskykyä. Käytä sen sijaan varchar(n) sitä, mikä n voi olla mikä tahansa numero. Mitä pienempi n on, sitä todennäköisemmin näet paremman kyselyn suorituskyvyn.

  5. Käytä CROSS APPLY seuraavassa kyselyssä, jos haluat näyttää vain kohteet, joissa on items matriisi.

    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 
    

Sisäkkäisten perustietojen kysely automaattisen rakenteen päättelyn avulla

Noudata edellisen esimerkin vaiheita 1–3. Samalla tietojoukolla voimme luoda kyselyn tietojen yhdistämiseksi ilman, että rakennetta tarvitsee määrittää eksplisiittisesti.

  1. Suorita tämä kysely, jos haluat laajentaa matriisia itemsOPENJSON määrittämättä rakennetta. Tämä tasoittaa alkiomatriyin yhden tason erottamalla jokaisen sisäkkäisen objektin uudelle riville.

    SELECT
        t.name,
        t.id,
        t.country,
        p.*
    FROM OrdersDB_TestC as t 
    CROSS APPLY OPENJSON(t.items) p
    
  2. Suorita tämä kysely, jos haluat laajentaa taulukkoa itemsOPENJSON edelleen määrittämättä rakennetta. Tämä tasoittaa alkiomatriyin kaksi tasoa erottamalla kunkin sisäkkäisen objektin jokaisen ominaisuuden uudelle riville.

    SELECT
        t.name,
        t.id,
        t.country,
        q.*
    FROM OrdersDB_TestC as t 
    CROSS APPLY OPENJSON(t.items) q
    OUTER APPLY OPENJSON(t.items) p
    

Syvästi sisäkkäisten tietojen luominen

Jos haluat rakentaa tämän sisäkkäisen dataesimerkin, lisätään syvästi sisäkkäinen tietoesimerkki.

  1. Siirry Azure Cosmos DB -tilillesi Azure-portaalissa.

  2. Valitse resurssivalikosta Resurssienhallinta .

  3. Käytä + Uusi säilö luodaksesi uuden säilön. Nimeä tätä opasta varten säilö TestD. Vastaava tietokannan nimi on mielivaltainen.

  4. Käytä + Uusi kohde -vaihtoehtoa useita kertoja tämän JSON-kohteen luomiseen ja tallentamiseen .

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

Syvästi sisäkkäisten tietojen kysely

Luo lopuksi T-SQL-kysely, joka voi löytää syvästi JSON-merkkijonoon sisäkkäin olevia tietoja.

  1. Avaa TestD taulukon pikavalikko ja valitse Uusi SQL-kysely uudelleen.

  2. Suorita tämä kysely, jos haluat laajentaa sisäkkäisten tietojen kaikki tasot käyttämällä OUTER APPLY lähetystä.

    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 
    

    Note

    Laajennettaessa packages, items esitetään JSON-muodossa, joka voidaan valinnaisesti laajentaa. Kiinteistöllä items on JSOn-aliominaisuuksia, joita voidaan myös valinnaisesti laajentaa.

  3. Suorita lopuksi kysely, joka valitsee, milloin tietyt sisäkkäiset tasot laajennetaan.

    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 
    

    Note

    Sisäkkäisten tasojen ominaisuusrajoituksia ei pakoteta tässä T-SQL-kyselykokemuksessa.