Новые и улучшенные функции JSON
- 6 мин
Добавление трех новых функций и улучшение ISJSON в SQL Server 2022 помогает разработчикам работать с объектами JSON более эффективно и легко. Эти функции помогают повысить потребность в более эффективной обработке популярных форматов данных в приложениях и API.
Объект JSON
Функция JSON_OBJECT
создает объект JSON, указывая пары "ключ-значение". Это упрощает процесс создания объектов JSON из результатов запроса.
ISJSON
Функция ISJSON
проверяет, содержит ли входная строка допустимый JSON, возвращая значение 1 , если значение true и 0 , если значение false. В SQL Server 2022 функция была расширена для поддержки json_type_constraint
, что позволяет проверять типы JSON VALUE
, ARRAY
, OBJECT
или SCALAR
.
СУЩЕСТВУЕТ_JSON_ПУТЬ
Функция JSON_PATH_EXISTS
проверяет, существует ли определенный путь JSON в строке JSON, возвращая значение 1 , если значение true и 0 , если значение false. Эта функция полезна для проверки наличия свойств в данных JSON.
JSON_ARRAY
Функция JSON_ARRAY
создает массив JSON путем указания элементов. Это упрощает процесс преобразования данных в массивы JSON, что полезно при работе с API или приложениями, требующими массивов JSON.
Упрощение обработки JSON с помощью JSON_OBJECT и JSON_PATH_EXISTS
Представьте себе, что вы DBA для крупного финансового учреждения. ИТ-отдел установил программное обеспечение мониторинга для всей сети. Программное обеспечение создало базу данных с именем CollectionDB. Для мониторинга статистики запросов SQL Server эта база данных содержит таблицу QueryRequestStats с столбцами CollectionTime, ServerName, session_id и QueryStats. Столбец QueryStats должен быть в формате JSON. Необходимо создать скрипт коллекции, заполняющий эту таблицу текстом запроса, планом и общей статистикой каждые 5 минут. Чтобы свести к минимуму затраты, вы решаете собирать только нeспящие и нефоновые процессы. Кроме того, ваша команда запрашивает запрос к этой таблице, которая вернет первые 10 запросов по использованию ЦП с текстом запроса, заполненным для даты сбора 2023-03-29 12:54:00.000
. Выполните следующие запросы в SQL Server Management Studio (SSMS), чтобы сохранить и получить эти данные.
-- Query to collect data, run it every 5 minutes
INSERT INTO CollectionDB.dbo.QueryRequestStats
SELECT GETDATE() AS CollectionTime
, @@ServerName AS ServerName
, er.session_id
, JSON_OBJECT ('session_id':er.session_id
, 'status':er.status
, 'command':er.command
, 'performanceCounters':JSON_OBJECT(
'cpu':er.cpu_time
, 'duration':er.total_elapsed_time
, 'reads':er.logical_reads
)
, 'sql_text':JSON_OBJECT (
'text': est.text
, 'starting_offset':er.statement_start_offset
, 'ending_offset':er.statement_end_offset
)
, 'query_plan':eqp.query_plan
) AS QueryStats
FROM sys.dm_exec_requests er
OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) est
OUTER APPLY sys.dm_exec_query_plan(er.plan_handle) eqp
WHERE er.status NOT IN ('sleeping', 'background')
AND session_id > 50
AND session_id != @@SPID
-- Query to return the top 10 requests by CPU usage that have a query text for the collection time `2023-03-29 12:54:00.000`
SELECT *
FROM CollectionDB.dbo.QueryRequestStats
WHERE JSON_PATH_EXISTS(QueryStats, '$.sql_text.text') = 1
AND JSON_VALUE(QueryStats, '$.sql_text.text') IS NOT NULL
AND CollectionTime = '2023-03-29 12:54:00.000'
ORDER BY CAST(JSON_VALUE(QueryStats, '$.performanceCounters.cpu') AS INT) DESC
Чтобы собрать данные, обратите внимание, как мы собираем статистику запросов в столбец QueryStats в формате JSON с помощью функции.JSON_OBJECT
Кроме того, мы создадим еще два свойства JSON в коллекции: performanceCounters и sql_text, используя функцию JSON_OBJECT
.
Чтобы отобразить данные, мы используем JSON_PATH_EXISTS
и JSON_VALUE
, чтобы гарантировать, что если свойство существует, то sql_text.text
не пуст.
Сбор данных о производительности и его преобразование в JSON — это лишь один из бесчисленных сценариев, которые могут в значительной степени воспользоваться этими функциями. Добавление и улучшение функций JSON в SQL Server 2022 упрощает работу пользователей с объектами JSON, устраняя растущий спрос на более удобные способы обработки популярных форматов данных, часто используемых в современных приложениях и API.