Sdílet prostřednictvím


Jak na to: Dotazování vnořených dat v databázích zrcadlených Microsoft Fabricem ze služby Azure Cosmos DB

Pomocí zrcadlené databáze v Microsoft Fabric můžete dotazovat vnořená data JSON zdrojová ze služby Azure Cosmos DB for NoSQL.

Požadavky

Návod

Doporučujeme použít testovací nebo vývojovou kopii stávajících dat Azure Cosmos DB, která se dají rychle obnovit ze zálohy.

Vytvoření vnořených dat ve zdrojové databázi

Vytvořte položky JSON v účtu Azure Cosmos DB for NoSQL, které obsahují různé úrovně vnořených dat JSON.

  1. Na webu Azure Portal přejděte ke svému účtu služby Azure Cosmos DB.

  2. V nabídce prostředků vyberte Průzkumník dat .

  3. K vytvoření nového kontejneru použijte + Nový kontejner. Pro tuto příručku pojmenujte kontejner TestC. Odpovídající název databáze je libovolný.

  4. Pomocí možnosti + Nová položka několikrát vytvořte a uložte tyto pět položek 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"
    }
    

Nastavení zrcadlení a požadavků

Nakonfigurujte zrcadlení pro databázi Azure Cosmos DB for NoSQL. Pokud si nejste jistí, jak nakonfigurovat zrcadlení, projděte si kurz konfigurace zrcadlené databáze.

  1. Přejděte na portál Fabric.

  2. Vytvořte nové připojení a zrcadlenou databázi pomocí přihlašovacích údajů účtu služby Azure Cosmos DB.

  3. Počkejte, až replikace dokončí počáteční snímek dat.

Dotazování základních vnořených dat

Teď pomocí koncového bodu SQL Analytics vytvořte dotaz, který dokáže zpracovat jednoduchá vnořená data JSON.

  1. Na portálu Fabric přejděte do zrcadlené databáze.

  2. Přepněte ze zrcadlené služby Azure Cosmos DB na koncový bod analýzy SQL.

    Snímek obrazovky se selektorem pro přepínání mezi položkami na portálu Fabric

  3. Otevřete místní nabídku pro testovací tabulku a vyberte Nový dotaz SQL.

  4. Spuštěním tohoto dotazu rozbalte items pole pomocí OPENJSONpříkazu . Tento dotaz používá OUTER APPLY k zahrnutí dalších položek, které nemusí mít pole položek.

    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
    

    Návod

    Při výběru datových typů v OPENJSONaplikaci by použití varchar(max) pro typy řetězců mohlo zhoršit výkon dotazů. Místo toho může být libovolná číslice.varchar(n)n Čím nižší n je, tím pravděpodobnější bude lepší výkon dotazů.

  5. V CROSS APPLY dalším dotazu slouží pouze k zobrazení položek s polem 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 
    

Dotazování základních vnořených dat pomocí automatického odvozování schématu

Postupujte podle kroků 1 až 3 v předchozím příkladu. Se stejnou sadou dat můžeme vytvořit dotaz pro zploštění dat, aniž bychom museli explicitně definovat schéma.

  1. Spuštěním tohoto dotazu rozbalte items pole bez OPENJSON definování schématu. Tím se pole položek zploštějí o jednu úroveň tím, že jednotlivé vnořené objekty rozdělí do nového řádku.

    SELECT
        t.name,
        t.id,
        t.country,
        p.*
    FROM OrdersDB_TestC as t 
    CROSS APPLY OPENJSON(t.items) p
    
  2. Spuštěním tohoto dotazu dále rozbalte items pole bez OPENJSON definování schématu. Tím se pole položek zploštějí dvěma úrovněmi tím, že každou vlastnost v rámci každého vnořeného objektu rozdělíte do nového řádku.

    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
    

Vytváření hluboko vnořených dat

Abychom mohli stavět na tomto příkladu vnořených dat, pojďme přidat hluboko vnořený příklad dat.

  1. Na webu Azure Portal přejděte ke svému účtu služby Azure Cosmos DB.

  2. V nabídce prostředků vyberte Průzkumník dat .

  3. K vytvoření nového kontejneru použijte + Nový kontejner. Pro tuto příručku pojmenujte kontejner TestD. Odpovídající název databáze je libovolný.

  4. Pomocí možnosti + Nová položka několikrát vytvořte a uložte tuto položku 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"
      }
    }
    

Dotazování hluboce vnořených dat

Nakonec vytvořte dotaz T-SQL, který dokáže najít data hluboko vnořená do řetězce JSON.

  1. Otevřete místní nabídku tabulky TestD a znovu vyberte Nový dotaz SQL .

  2. Spuštěním tohoto dotazu rozbalte všechny úrovně vnořených dat pomocí OUTER APPLY zásilky.

    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 
    

    Poznámka:

    Při rozbalování packagesitems je reprezentován jako JSON, který může volitelně rozbalit. Vlastnost items má dílčí vlastnosti jako JSOn, které také mohou volitelně rozbalit.

  3. Nakonec spusťte dotaz, který zvolí, kdy se mají rozšířit konkrétní úrovně vnoření.

    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 
    

    Poznámka:

    Omezení vlastností pro vnořené úrovně se v tomto prostředí dotazů T-SQL nevynucují.