Freigeben über


Informationen zur Abfrage verschachtelter Daten in gespiegelten Microsoft Fabric-Datenbanken aus Azure Cosmos DB (Vorschau)

Verwenden Sie die gespiegelte Datenbank in Microsoft Fabric, um verschachtelte JSON-Daten abzufragen, die von Azure Cosmos DB for NoSQL stammen.

Wichtig

Die Spiegelung für Azure Cosmos DB befindet sich derzeit in der Vorschau. Produktionsworkloads werden in der Vorschauversion nicht unterstützt. Derzeit werden nur Azure Cosmos DB for NoSQL-Konten unterstützt.

Voraussetzungen

Tipp

Es wird empfohlen, während der öffentlichen Vorschau eine Test- oder Entwicklungskopie Ihrer bestehenden Azure Cosmos DB-Daten zu verwenden, die schnell aus einem Backup wiederhergestellt werden kann.

Erstellen geschachtelter Daten innerhalb der Quelldatenbank

Erstellen Sie JSON-Elemente innerhalb Ihres Azure Cosmos DB for NoSQL-Kontos, die verschiedene Ebenen von verschachtelten JSON-Daten enthalten.

  1. Navigieren Sie im Azure-Portal zu Ihrem Azure Cosmos DB-Konto.

  2. Wählen Sie im Ressourcenmenü Data Explorer aus.

  3. Wählen Sie + neuer Container aus, um einen neuen Container zu erstellen. Benennen Sie für diese Anleitung den Container TestC. Der entsprechende Datenbankname ist beliebig.

  4. Verwenden Sie die Option + neues Element mehrmals, um diese fünf JSON-Elemente zu erstellen und zu speichern.

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

Einrichten der Spiegelung und Voraussetzungen

Konfigurieren Sie die Spiegelung für die Azure Cosmos DB for NoSQL-Datenbank. Wenn Sie sich nicht sicher sind, wie Sie die Spiegelung konfigurieren, lesen Sie die Anleitung zur Konfiguration gespiegelter Datenbanken.

  1. Navigieren Sie zum Fabric-Portal.

  2. Erstellen Sie eine neue Verbindung und eine gespiegelte Datenbank mit den Anmeldedaten Ihres Azure Cosmos DB-Kontos.

  3. Warten Sie, bis die Replikation die Anfangsmomentaufnahme der Daten abgeschlossen hat.

Abfragen grundlegender geschachtelter Daten

Verwenden Sie nun den SQL-Analyse-Endpunkt, um eine Abfrage zu erstellen, die einfache verschachtelte JSON-Daten verarbeiten kann.

  1. Navigieren zur gespiegelten Datenbank im Fabric-Portal.

  2. Wechseln Sie von Gespiegelte Azure Cosmos DB zum SQL-Analytics-Endpunkt.

    Screenshot des Selektors zum Umschalten zwischen den Artikeln im Fabric-Portal.

  3. Öffnen Sie das Kontextmenü für die Testtabelle, und wählen Sie Neue SQL-Abfrage aus.

  4. Führen Sie diese Abfrage aus, um das items-Array mit OPENJSON zu erweitern. Diese Abfrage verwendet OUTER APPLY, um zusätzliche Elemente einzubeziehen, die möglicherweise kein Element-Array haben.

    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
    

    Tipp

    Wenn Sie die Datentypen in OPENJSON auswählen, kann die Verwendung von varchar(max) für Zeichenkettentypen die Abfrageleistung beeinträchtigen. Verwenden Sie stattdessen varchar(n) überall dort, wo n eine beliebige Zahl sein kann. Je niedriger n ist, desto wahrscheinlicher wird die Abfrageleistung verbessert.

  5. Verwenden Sie CROSS APPLY in der nächsten Abfrage, um nur Elemente mit einem items-Array anzuzeigen.

    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 
    

Erstellen tief verschachtelter Daten

Lassen Sie uns auf diesem Beispiel für verschachtelte Daten aufbauen und ein Beispiel für tief verschachtelte Daten hinzufügen.

  1. Navigieren Sie im Azure-Portal zu Ihrem Azure Cosmos DB-Konto.

  2. Wählen Sie im Ressourcenmenü Data Explorer aus.

  3. Wählen Sie + neuer Container aus, um einen neuen Container zu erstellen. Benennen Sie für diese Anleitung den Container TestD. Der entsprechende Datenbankname ist beliebig.

  4. Verwenden Sie die Option + neues Element mehrmals, um dieses JSON-Element zu erstellen und zu speichern.

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

Tief verschachtelte Daten abfragen

Erstellen Sie schließlich eine T-SQL-Abfrage, die tief in einer JSON-Zeichenkette verschachtelte Daten finden kann.

  1. Öffnen Sie das Kontextmenü für die TestD-Tabelle und wählen Sie erneut Neue SQL-Abfrage.

  2. Führen Sie diese Abfrage aus, um alle Ebenen der verschachtelten Daten mit OUTER APPLY mit der Konsignation zu erweitern.

    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 
    

    Hinweis

    Beim Erweitern von packages wird items als JSON dargestellt, das optional erweitert werden kann. Die items-Eigenschaft hat Untereigenschaften wie JSON, die ebenfalls optional erweitert werden können.

  3. Führen Sie schließlich eine Abfrage aus, die festlegt, wann bestimmte Verschachtelungsebenen erweitert werden sollen.

    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 
    

    Hinweis

    Eigenschaftsgrenzen für verschachtelte Ebenen werden in dieser T-SQL-Abfrageerfahrung nicht erzwungen.