Instrukcje: wykonywanie zapytań dotyczących zagnieżdżonych danych w dublowanych bazach danych usługi Microsoft Fabric z usługi Azure Cosmos DB (wersja zapoznawcza)

Użyj dublowanej bazy danych w usłudze Microsoft Fabric, aby wysyłać zapytania o zagnieżdżone dane JSON pochodzące z usługi Azure Cosmos DB for NoSQL.

Ważne

Dublowanie dla usługi Azure Cosmos DB jest obecnie dostępne w wersji zapoznawczej. Obciążenia produkcyjne nie są obsługiwane w wersji zapoznawczej. Obecnie obsługiwane są tylko konta usługi Azure Cosmos DB for NoSQL.

Wymagania wstępne

  • Istniejące konto usługi Azure Cosmos DB for NoSQL.
    • Jeśli nie masz subskrypcji platformy Azure, wypróbuj bezpłatnie usługę Azure Cosmos DB dla noSQL.
    • Jeśli masz istniejącą subskrypcję platformy Azure, utwórz nowe konto usługi Azure Cosmos DB for NoSQL.
  • Istniejąca pojemność sieci szkieletowej. Jeśli nie masz istniejącej pojemności, uruchom wersję próbną usługi Fabric.
  • Włącz dublowanie w dzierżawie sieci szkieletowej lub obszarze roboczym. Jeśli ta funkcja nie jest jeszcze włączona, włącz dublowanie w dzierżawie sieci szkieletowej.
  • Konto usługi Azure Cosmos DB for NoSQL musi być skonfigurowane pod kątem dublowania sieci szkieletowej. Aby uzyskać więcej informacji, zobacz wymagania dotyczące konta.

Napiwek

W publicznej wersji zapoznawczej zaleca się użycie kopii testowej lub deweloperskiej istniejących danych usługi Azure Cosmos DB, które można szybko odzyskać z kopii zapasowej.

Tworzenie zagnieżdżonych danych w źródłowej bazie danych

Utwórz elementy JSON w ramach konta usługi Azure Cosmos DB for NoSQL zawierające różne poziomy zagnieżdżonych danych JSON.

  1. Przejdź do konta usługi Azure Cosmos DB w witrynie Azure Portal.

  2. Wybierz pozycję Eksplorator danych z menu zasobów.

  3. Użyj polecenia + Nowy kontener , aby utworzyć nowy kontener. W tym przewodniku nadaj kontenerowi TestCnazwę . Odpowiadająca nazwa bazy danych jest dowolna.

  4. Użyj opcji + Nowy element wiele razy, aby utworzyć i zapisać te pięć elementów 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"
    }
    

Konfigurowanie dublowania i wymagań wstępnych

Konfigurowanie dublowania dla bazy danych Azure Cosmos DB for NoSQL. Jeśli nie masz pewności, jak skonfigurować dublowanie, zapoznaj się z samouczkiem dotyczącym konfigurowania dublowanej bazy danych.

  1. Przejdź do portalu sieci szkieletowej.

  2. Utwórz nowe połączenie i dublowaną bazę danych przy użyciu poświadczeń konta usługi Azure Cosmos DB.

  3. Poczekaj, aż replikacja zakończy początkową migawkę danych.

Wykonywanie zapytań względem podstawowych zagnieżdżonych danych

Teraz użyj punktu końcowego analizy SQL, aby utworzyć zapytanie, które może obsługiwać proste zagnieżdżone dane JSON.

  1. Przejdź do dublowanej bazy danych w portalu sieci szkieletowej.

  2. Przełącz się z dublowanej usługi Azure Cosmos DB do punktu końcowego analizy SQL.

    Zrzut ekranu przedstawiający selektor do przełączania między elementami w portalu sieci szkieletowej.

  3. Otwórz menu kontekstowe dla tabeli testowej i wybierz pozycję Nowe zapytanie SQL.

  4. Uruchom to zapytanie, aby rozwinąć tablicę items za pomocą polecenia OPENJSON. To zapytanie używa OUTER APPLY funkcji dołączania dodatkowych elementów, które mogą nie mieć tablicy elementów.

    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
    

    Napiwek

    Podczas wybierania typów danych w OPENJSONprogramie użycie varchar(max) dla typów ciągów może pogorszyć wydajność zapytań. Zamiast tego użyj varchar(n) wher n może być dowolną liczbą. Im niższa n jest, tym bardziej prawdopodobna będzie lepsza wydajność zapytań.

  5. Użyj CROSS APPLY w następnym zapytaniu, aby wyświetlić tylko elementy z tablicą 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 
    

Tworzenie głęboko zagnieżdżonych danych

Aby opierać się na tym przykładzie zagnieżdżonych danych, dodajmy przykład głęboko zagnieżdżonych danych.

  1. Przejdź do konta usługi Azure Cosmos DB w witrynie Azure Portal.

  2. Wybierz pozycję Eksplorator danych z menu zasobów.

  3. Użyj polecenia + Nowy kontener , aby utworzyć nowy kontener. W tym przewodniku nadaj kontenerowi TestDnazwę . Odpowiadająca nazwa bazy danych jest dowolna.

  4. Użyj opcji + Nowy element wiele razy, aby utworzyć i zapisać ten element 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"
      }
    }
    

Wykonywanie zapytań dotyczących głęboko zagnieżdżonych danych

Na koniec utwórz zapytanie T-SQL, które może znaleźć dane głęboko zagnieżdżone w ciągu JSON.

  1. Otwórz menu kontekstowe TestD tabeli i ponownie wybierz pozycję Nowe zapytanie SQL.

  2. Uruchom to zapytanie, aby rozwinąć wszystkie poziomy zagnieżdżonych danych przy użyciu OUTER APPLY polecenia z przesyłką.

    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 
    

    Uwaga

    Podczas rozwijania packagesitems parametru jest reprezentowany jako kod JSON, który można opcjonalnie rozwinąć. Właściwość items ma właściwości podrzędne jako JSOn, które również mogą opcjonalnie rozwinąć.

  3. Na koniec uruchom zapytanie, które wybiera, kiedy rozszerzyć określone poziomy zagnieżdżania.

    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 
    

    Uwaga

    Limity właściwości dla poziomów zagnieżdżonych nie są wymuszane w tym środowisku zapytania T-SQL.