Postupy: Dotazování vnořených dat v databázích Microsoft Fabric zrcadlených z Azure Cosmos DB (Preview)

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

Důležité

Zrcadlení služby Azure Cosmos DB je aktuálně ve verzi Preview. Produkční úlohy nejsou ve verzi Preview podporované. V současné době se podporují jenom účty Azure Cosmos DB for NoSQL.

Požadavky

Tip

Ve verzi Public Preview se doporučuje použít testovací nebo vývojovou kopii stávajících dat Azure Cosmos DB, která je možné 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
    

    Tip

    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 
    

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