Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Используйте зеркальную базу данных в Microsoft Fabric для запроса вложенных данных JSON из Azure Cosmos DB для NoSQL.
Предпосылки
- Существующая учетная запись Azure Cosmos DB для NoSQL.
- Если у вас нет подписки Azure, попробуйте использовать Azure Cosmos DB для NoSQL бесплатно.
- Если у вас есть подписка Azure, создайте новую учетную запись Azure Cosmos DB для NoSQL.
- Существующая емкость Fabric. Если у вас нет существующей емкости, запустите пробную версию Fabric.
- Учетная запись Azure Cosmos DB для NoSQL должна быть настроена для зеркального отображения Fabric. Дополнительные сведения см. в разделе "Требования к учетной записи".
Подсказка
Рекомендуется использовать тестовую копию или копию для разработки ваших существующих данных Azure Cosmos DB, которые можно быстро восстановить из резервной копии.
Создание вложенных данных в исходной базе данных
Создайте элементы JSON в учетной записи Azure Cosmos DB для NoSQL, содержащую различные уровни вложенных данных JSON.
Перейдите к учетной записи Azure Cosmos DB на портале Azure.
Выберите Обозреватель данных из меню ресурсов.
Используйте +Создать контейнер для создания нового контейнера. В этом руководстве укажите имя контейнера
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 для NoSQL. Если вы не уверены, как настроить зеркальное отображение, ознакомьтесь с руководством по настройке зеркальной базы данных.
Перейдите на портал Fabric.
Создайте новое подключение и зеркальную базу данных с помощью учетных данных учетной записи Azure Cosmos DB.
Дождитесь завершения начального моментального снимка данных репликации.
Запрос базовых вложенных данных
Теперь используйте конечную точку аналитики SQL для создания запроса, который может обрабатывать простые вложенные данные JSON.
Перейдите к зеркальной базе данных на портале Fabric.
Переключение с зеркального отображения Azure Cosmos DB на конечную точку аналитики SQL.
Откройте контекстное меню для тестовой таблицы и выберите новый SQL-запрос.
Выполните этот запрос, чтобы развернуть
itemsмассив сOPENJSONпомощью . Этот запрос используется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)whernможет быть любое число. Чем ниже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
Запрос базовых вложенных данных с автоматическим выводом схемы
Выполните шаги 1–3 в предыдущем примере. С тем же набором данных можно создать запрос для выравнивания данных без явного определения схемы.
Выполните этот запрос, чтобы развернуть
itemsмассив безOPENJSONопределения схемы. Это разравнивает массив элементов на один уровень, разделяя каждый вложенный объект в новую строку.SELECT t.name, t.id, t.country, p.* FROM OrdersDB_TestC as t CROSS APPLY OPENJSON(t.items) pВыполните этот запрос для дальнейшего расширения массива
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
Создание глубоко вложенных данных
Чтобы создать этот пример вложенных данных, давайте добавим глубоко вложенный пример данных.
Перейдите к учетной записи Azure Cosmos DB на портале Azure.
Выберите Обозреватель данных из меню ресурсов.
Используйте +Создать контейнер для создания нового контейнера. В этом руководстве укажите имя контейнера
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Замечание
При развертывании
packagesitemsпредставляется в формате 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.