操作说明:从 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 镜像配置 Azure Cosmos DB for NoSQL 帐户。 有关详细信息,请参阅帐户要求。
提示
在公共预览期间,建议使用现有 Azure Cosmos DB 数据的测试或开发副本,以便从备份中快速恢复。
在源数据库中创建嵌套数据
在 Azure Cosmos DB for NoSQL 帐户中创建 JSON 项,这些项包含不同级别的嵌套 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 查询体验中,不强制实施嵌套级别的属性限制。