共用方式為


操作說明:從 Azure Cosmos DB (預覽版) 查詢 Microsoft Fabric 鏡像資料庫中的巢狀資料

使用 Microsoft Fabric 中的鏡像資料庫來查詢源自 Azure Cosmos DB for NoSQL 的巢狀 JSON 資料。

重要

Azure Cosmos DB 的鏡像功能目前為預覽版。 預覽期間不支援生產工作負載。 目前僅支援 Azure Cosmos DB for NoSQL 帳戶。

必要條件

提示

在公開預覽期間,建議您使用現有 Azure Cosmos DB 資料的測試或開發拷貝,以便從備份快速復原。

在來源資料庫內建立巢狀資料

在包含不同層級巢狀 JSON 資料的 Azure Cosmos DB for NoSQL 帳戶內建立 JSON 項目。

  1. 瀏覽至 Azure 入口網站中的 Azure Cosmos DB 帳戶。

  2. 在 [資源] 功能表中,選取 [資料總管]

  3. 使用 [新增容器] 以建立新的容器。 在本指南中,將容器命名為 TestC。 對應的資料庫名稱可任意指定。

  4. 多次使用 [新增項目] 選項,建立並儲存這五個 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"
    }
    

設定鏡像和必要條件

為 Azure Cosmos DB for NoSQL 資料庫設定鏡像。 如果您不確定如何設定鏡像,請參閱設定鏡像資料庫教學課程

  1. 瀏覽至 Fabric 入口網站

  2. 使用 Azure Cosmos DB 帳戶的認證建立新的連線和鏡像資料庫。

  3. 等候複寫完成資料的初始快照集。

查詢基本巢狀資料

現在,使用 SQL 分析端點來建立可處理簡單巢狀 JSON 資料的查詢。

  1. 瀏覽至 Fabric 入口網站中的鏡像資料庫。

  2. 從 [鏡像 Azure Cosmos DB] 切換至 [SQL 分析端點]

    在 Fabric 入口網站中切換項目之選取器的螢幕擷取畫面。

  3. 開啟測試資料表的特色選單,然後選取 [新增 SQL 查詢]。

  4. 執行此查詢以使用 OPENJSON 展開 items 陣列。 此查詢會使用 OUTER APPLY 來包括可能沒有項目陣列的額外項目。

    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
    

    提示

    OPENJSON 中選擇資料類型時,使用 varchar(max) 字串類型可能會使查詢效能惡化。 相反地,使用 varchar(n),其中 n 可以是任何數字。 n 越小,就越有可能看到更好的查詢效能。

  5. 在下一個查詢中使用 CROSS APPLY,只顯示具有 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 
    

建立深層巢狀資料

若要在此巢狀資料範例之上建置,讓我們新增深度巢狀資料範例。

  1. 瀏覽至 Azure 入口網站中的 Azure Cosmos DB 帳戶。

  2. 在 [資源] 功能表中,選取 [資料總管]

  3. 使用 [新增容器] 以建立新的容器。 在本指南中,將容器命名為 TestD。 對應的資料庫名稱可任意指定。

  4. 多次使用 [新增項目] 選項,建立並儲存此 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"
      }
    }
    

查詢深度巢狀資料

最後,建立一個 T-SQL 查詢,以查找 JSON 字串中的深度巢狀資料。

  1. 開啟 TestD 資料表的特色選單,然後再次選取 [新增 SQL 查詢]。

  2. 執行此查詢,將 OUTER APPLY 與寄售搭配,展開所有層級的巢狀資料。

    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 
    

    注意

    展開 packages 時,items 會以 JSON 形式表示,這可以選擇性地展開。 屬性 items 具有 JSON 格式的子屬性,也可以選擇性地展開。

  3. 最後,執行查詢,選擇何時展開特定層級的巢狀。

    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 
    

    注意

    此 T-SQL 查詢體驗中不會強制執行巢狀層級的屬性限制。