Share via


Procedure: Query's uitvoeren op geneste gegevens in gespiegelde Databases van Microsoft Fabric vanuit Azure Cosmos DB (preview)

Gebruik de gespiegelde database in Microsoft Fabric om een query uit te voeren op geneste JSON-gegevens uit Azure Cosmos DB for NoSQL.

Belangrijk

Spiegeling voor Azure Cosmos DB is momenteel beschikbaar als preview-versie. Productieworkloads worden niet ondersteund tijdens de preview-versie. Momenteel worden alleen Azure Cosmos DB for NoSQL-accounts ondersteund.

Vereisten

Tip

Tijdens de openbare preview kunt u het beste een test- of ontwikkelingskopie van uw bestaande Azure Cosmos DB-gegevens gebruiken die snel vanuit een back-up kunnen worden hersteld.

Geneste gegevens maken in de brondatabase

Maak JSON-items in uw Azure Cosmos DB for NoSQL-account met verschillende niveaus van geneste JSON-gegevens.

  1. Navigeer naar uw Azure Cosmos DB-account in Azure Portal.

  2. Selecteer Data Explorer in het resourcemenu.

  3. Gebruik + Nieuwe container om een nieuwe container te maken. Geef voor deze handleiding de container TestCde naam. De bijbehorende databasenaam is willekeurig.

  4. Gebruik de optie + Nieuw item meerdere keren om deze vijf JSON-items te maken en op te slaan .

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

Spiegeling en vereisten instellen

Spiegeling configureren voor de Azure Cosmos DB for NoSQL-database. Als u niet zeker weet hoe u spiegeling configureert, raadpleegt u de zelfstudie gespiegelde database configureren.

  1. Navigeer naar de Fabric-portal.

  2. Maak een nieuwe verbinding en gespiegelde database met behulp van de referenties van uw Azure Cosmos DB-account.

  3. Wacht tot de replicatie de eerste momentopname van gegevens heeft voltooid.

Query uitvoeren op basis van geneste gegevens

Gebruik nu het SQL Analytics-eindpunt om een query te maken waarmee eenvoudige geneste JSON-gegevens kunnen worden verwerkt.

  1. Navigeer naar de gespiegelde database in de Fabric-portal.

  2. Schakel over van gespiegelde Azure Cosmos DB naar sql-analyse-eindpunt.

    Schermopname van de selector om te schakelen tussen items in de Fabric-portal.

  3. Open het contextmenu voor de testtabel en selecteer Nieuwe SQL-query.

  4. Voer deze query uit om de items matrix uit te breiden met OPENJSON. Deze query maakt gebruik OUTER APPLY van extra items die mogelijk geen itemsmatrix bevatten.

    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

    Wanneer u de gegevenstypen kiest OPENJSON, kan het gebruik varchar(max) voor tekenreekstypen de prestaties van query's verslechteren. Gebruik in plaats daarvan varchar(n) wher n kan een willekeurig getal zijn. Hoe lager n is de kans dat u betere queryprestaties ziet.

  5. Gebruik CROSS APPLY in de volgende query om alleen items met een items matrix weer te geven.

    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 
    

Diep geneste gegevens maken

Laten we een voorbeeld van geneste gegevens toevoegen om voort te bouwen op dit voorbeeld van geneste gegevens.

  1. Navigeer naar uw Azure Cosmos DB-account in Azure Portal.

  2. Selecteer Data Explorer in het resourcemenu.

  3. Gebruik + Nieuwe container om een nieuwe container te maken. Geef voor deze handleiding de container TestDde naam. De bijbehorende databasenaam is willekeurig.

  4. Gebruik de optie + Nieuw item meerdere keren om dit JSON-item te maken en op te slaan .

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

Diep geneste gegevens opvragen

Maak ten slotte een T-SQL-query waarmee gegevens diep genest kunnen worden gevonden in een JSON-tekenreeks.

  1. Open het contextmenu voor de TestD tabel en selecteer opnieuw Nieuwe SQL-query .

  2. Voer deze query uit om alle niveaus van geneste gegevens uit te breiden met behulp van OUTER APPLY een zending.

    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 
    

    Notitie

    Wanneer u uitvouwt packages, items wordt deze weergegeven als JSON, die optioneel kan worden uitgebreid. De items eigenschap heeft subeigenschappen als JSOn, die eventueel ook kan worden uitgebreid.

  3. Voer ten slotte een query uit die bepaalt wanneer u specifieke geneste niveaus wilt uitbreiden.

    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 
    

    Notitie

    Eigenschapslimieten voor geneste niveaus worden niet afgedwongen in deze T-SQL-query-ervaring.