操作說明:從 Azure Cosmos DB (預覽版) 查詢 Microsoft Fabric 鏡像資料庫中的巢狀資料
使用 Microsoft Fabric 中的鏡像資料庫來查詢源自 Azure Cosmos DB for NoSQL 的巢狀 JSON 資料。
重要
Azure Cosmos DB 的鏡像功能目前為預覽版。 預覽期間不支援生產工作負載。 目前僅支援 Azure Cosmos DB for NoSQL 帳戶。
必要條件
- 現有的 Azure Cosmos DB for NoSQL 帳戶。
- 如果您沒有 Azure 訂用帳戶,可以免費試用 Azure Cosmos DB for NoSQL。
- 如果您有現有的 Azure 訂用帳戶,請建立新的 Azure Cosmos DB for NoSQL 帳戶。
- 現有的 Fabric 容量。 如果您沒有現有的容量,請啟動 Fabric 試用版。
- 在 Fabric 租用戶或工作區中啟用鏡像。 如果尚未啟用此功能,請在您的 Fabric 租用戶中啟用鏡像。
- 必須為 Fabric 鏡像功能設定 Azure Cosmos DB for NoSQL 帳戶。 如需詳細資訊,請參閱帳戶需求。
提示
在公開預覽期間,建議您使用現有 Azure Cosmos DB 資料的測試或開發拷貝,以便從備份快速復原。
在來源資料庫內建立巢狀資料
在包含不同層級巢狀 JSON 資料的 Azure Cosmos DB for NoSQL 帳戶內建立 JSON 項目。
瀏覽至 Azure 入口網站中的 Azure Cosmos DB 帳戶。
在 [資源] 功能表中,選取 [資料總管]。
使用 [新增容器] 以建立新的容器。 在本指南中,將容器命名為
TestC
。 對應的資料庫名稱可任意指定。多次使用 [新增項目] 選項,建立並儲存這五個 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 資料庫設定鏡像。 如果您不確定如何設定鏡像,請參閱設定鏡像資料庫教學課程。
瀏覽至 Fabric 入口網站。
使用 Azure Cosmos DB 帳戶的認證建立新的連線和鏡像資料庫。
等候複寫完成資料的初始快照集。
查詢基本巢狀資料
現在,使用 SQL 分析端點來建立可處理簡單巢狀 JSON 資料的查詢。
瀏覽至 Fabric 入口網站中的鏡像資料庫。
從 [鏡像 Azure Cosmos DB] 切換至 [SQL 分析端點]。
開啟測試資料表的特色選單,然後選取 [新增 SQL 查詢]。
執行此查詢以使用
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
越小,就越有可能看到更好的查詢效能。在下一個查詢中使用
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
建立深層巢狀資料
若要在此巢狀資料範例之上建置,讓我們新增深度巢狀資料範例。
瀏覽至 Azure 入口網站中的 Azure Cosmos DB 帳戶。
在 [資源] 功能表中,選取 [資料總管]。
使用 [新增容器] 以建立新的容器。 在本指南中,將容器命名為
TestD
。 對應的資料庫名稱可任意指定。多次使用 [新增項目] 選項,建立並儲存此 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 字串中的深度巢狀資料。
開啟
TestD
資料表的特色選單,然後再次選取 [新增 SQL 查詢]。執行此查詢,將
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 格式的子屬性,也可以選擇性地展開。最後,執行查詢,選擇何時展開特定層級的巢狀。
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 查詢體驗中不會強制執行巢狀層級的屬性限制。