共用方式為


如何:查詢 Azure Cosmos DB 中 Microsoft Fabric 鏡像資料庫中的巢狀資料

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

先決條件

小提示

建議使用可快速從備份中恢復的現有 Azure Cosmos 資料庫測試或開發副本。

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

在適用於 NoSQL 的 Azure Cosmos DB 帳戶內建立 JSON 專案,其中包含不同層級的巢狀 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"
    }
    

設定鏡像和必要條件

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

  1. 流覽至 Fabric 入口網站

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

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

查詢基本巢狀資料

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

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

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

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

  3. 開啟 測試 資料表的內容功能表,然後選取 [ 新增 SQL 查詢]。

  4. 執行此查詢以 items 展開 OPENJSON陣列 。 此查詢用來 OUTER APPLY 包含可能沒有 items 陣列的額外專案。

    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) wher 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-3。 使用相同的資料集,我們可以建立查詢來展平資料,而不需要明確定義結構描述。

  1. 執行此查詢以展開 items 陣列 OPENJSON ,而不定義結構描述。 這會將每個巢狀物件分隔成新列,將專案陣列平面化一級。

    SELECT
        t.name,
        t.id,
        t.country,
        p.*
    FROM OrdersDB_TestC as t 
    CROSS APPLY OPENJSON(t.items) p
    
  2. 執行此查詢以進一步擴充 items 陣列 OPENJSON ,而不定義結構描述。 這會將每個巢狀物件內的每個屬性分隔成新資料列,將專案陣列平面化兩個層級。

    SELECT
        t.name,
        t.id,
        t.country,
        q.*
    FROM OrdersDB_TestC as t 
    CROSS APPLY OPENJSON(t.items) q
    OUTER APPLY OPENJSON(t.items) 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. 執行此查詢,以使用 withsignment 來 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 查詢體驗中,不會強制執行巢狀層級的屬性限制。