Dela via


Anvisningar: Fråga efter kapslade data i Microsoft Fabric-speglade databaser från Azure Cosmos DB (förhandsversion)

Använd den speglade databasen i Microsoft Fabric för att fråga kapslade JSON-data från Azure Cosmos DB för NoSQL.

Viktigt!

Spegling för Azure Cosmos DB är för närvarande i förhandsversion. Produktionsarbetsbelastningar stöds inte under förhandsversionen. För närvarande stöds endast Azure Cosmos DB för NoSQL-konton.

Förutsättningar

Dricks

Under den offentliga förhandsversionen rekommenderar vi att du använder en test- eller utvecklingskopia av dina befintliga Azure Cosmos DB-data som kan återställas snabbt från en säkerhetskopia.

Skapa kapslade data i källdatabasen

Skapa JSON-objekt i ditt Azure Cosmos DB for NoSQL-konto som innehåller olika nivåer av kapslade JSON-data.

  1. Gå till ditt Azure Cosmos DB-konto i Azure Portal.

  2. Välj Datautforskaren på resursmenyn.

  3. Använd + Ny container för att skapa en ny container. I den här guiden namnger du containern TestC. Motsvarande databasnamn är godtyckligt.

  4. Använd alternativet + Nytt objekt flera gånger för att skapa och spara dessa fem JSON-objekt.

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

Konfigurera spegling och krav

Konfigurera spegling för Azure Cosmos DB för NoSQL-databasen. Om du är osäker på hur du konfigurerar spegling kan du läsa självstudien konfigurera speglad databas.

  1. Gå till Infrastrukturportalen.

  2. Skapa en ny anslutning och speglad databas med autentiseringsuppgifterna för ditt Azure Cosmos DB-konto.

  3. Vänta tills replikeringen har slutfört den första ögonblicksbilden av data.

Fråga efter grundläggande kapslade data

Använd nu SQL-analysslutpunkten för att skapa en fråga som kan hantera enkla kapslade JSON-data.

  1. Navigera till den speglade databasen i Fabric-portalen.

  2. Växla från Speglad Azure Cosmos DB till SQL-analysslutpunkt.

    Skärmbild av väljaren för att växla mellan objekt i Infrastrukturportalen.

  3. Öppna snabbmenyn för testtabellen och välj Ny SQL-fråga.

  4. Kör den här frågan för att expandera matrisen items med OPENJSON. Den här frågan används OUTER APPLY för att inkludera extra objekt som kanske inte har en objektmatris.

    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
    

    Dricks

    När du väljer datatyperna i OPENJSONkan användning för varchar(max) strängtyper försämra frågeprestanda. varchar(n) Använd wher n kan i stället vara valfritt tal. Ju lägre n är, desto mer sannolikt ser du bättre frågeprestanda.

  5. Använd CROSS APPLY i nästa fråga om du bara vill visa objekt med en items matris.

    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 
    

Skapa djupt kapslade data

Om du vill bygga vidare på det här kapslade dataexemplet ska vi lägga till ett djupt kapslat dataexempel.

  1. Gå till ditt Azure Cosmos DB-konto i Azure Portal.

  2. Välj Datautforskaren på resursmenyn.

  3. Använd + Ny container för att skapa en ny container. I den här guiden namnger du containern TestD. Motsvarande databasnamn är godtyckligt.

  4. Använd alternativet + Nytt objekt flera gånger för att skapa och spara det här JSON-objektet.

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

Fråga efter djupt kapslade data

Skapa slutligen en T-SQL-fråga som kan hitta data djupt kapslade i en JSON-sträng.

  1. Öppna snabbmenyn för TestD tabellen och välj Ny SQL-fråga igen.

  2. Kör den här frågan för att expandera alla nivåer av kapslade data med hjälp av OUTER APPLY sändning.

    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 
    

    Kommentar

    När du expanderar packagesitems , representeras som JSON, som kan expanderas. Egenskapen items har underegenskaper som JSOn som också kan expanderas.

  3. Kör slutligen en fråga som väljer när specifika kapslingsnivåer ska expanderas.

    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 
    

    Kommentar

    Egenskapsgränser för kapslade nivåer tillämpas inte i den här T-SQL-frågeupplevelsen.