Стандарт SQL:2016
SQL:2016 — это стандарт языка структурированных запросов (SQL), принятый Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC) в декабре 2016 года. Он является седьмой ревизией стандарта SQL (ISO/IEC 9075:2016) и заменил предыдущую версию SQL:2011. Основными нововведениями стали поддержка JSON-документов, появление полиморфных табличных функций, а также расширение возможностей для работы с графами и пространственными данными.
История
Разработка SQL:2016 началась вскоре после публикации SQL:2011. Основной движущей силой обновления стала необходимость интеграции реляционных баз данных с современными веб-технологиями и форматами обмена данными, прежде всего JSON. В 2014 году был опубликован технический отчёт (ISO/IEC TR 19075-6), который заложил основы для стандартизации JSON-функций. Окончательная версия стандарта была единогласно одобрена национальными органами-членами ISO и опубликована в декабре 2016 года.
Структура стандарта
Стандарт SQL:2016 состоит из девяти частей, каждая из которых описывает отдельный аспект языка:
- ISO/IEC 9075-1:2016 — Framework (общая структура и концепции)
- ISO/IEC 9075-2:2016 — Foundation (основные элементы языка, типы данных, выражения, операторы)
- ISO/IEC 9075-3:2016 — Call Level Interface (CLI) — интерфейс для взаимодействия приложений с СУБД
- ISO/IEC 9075-4:2016 — Persistent Stored Modules (PSM) — хранимые процедуры и функции
- ISO/IEC 9075-9:2016 — Management of External Data (MED) — управление внешними данными
- ISO/IEC 9075-10:2016 — Object Language Bindings (OLB) — привязки к объектно-ориентированным языкам
- ISO/IEC 9075-11:2016 — Information and Definition Schemas (SQL/Schemata) — информационные схемы
- ISO/IEC 9075-13:2016 — Routines and Types Using the Java Programming Language (SQL/JRT) — поддержка Java
- ISO/IEC 9075-14:2016 — XML-Related Specifications (SQL/XML) — работа с XML
Основные нововведения
Поддержка JSON
Наиболее значительным нововведением SQL:2016 стала стандартизация функций для работы с JSON. Стандарт определил:
- Тип данных JSON — формально не является отдельным типом, а представляется как строковый тип с проверкой корректности JSON-структуры.
- Функции для создания JSON:
JSON_OBJECT— создание JSON-объекта из пар ключ-значение.JSON_ARRAY— создание JSON-массива из значений.JSON_OBJECTAGGиJSON_ARRAYAGG— агрегатные функции для построения JSON из результатов запроса.- Функции для разбора JSON:
JSON_VALUE— извлечение скалярного значения из JSON-документа.JSON_QUERY— извлечение объекта или массива.JSON_EXISTS— проверка существования пути в JSON.JSON_TABLE— преобразование JSON-данных в реляционную табличную структуру.- Предикаты:
IS JSON— проверка, является ли строка корректным JSON.IS JSON VALUE— проверка на любое JSON-значение.IS JSON ARRAY,IS JSON OBJECT,IS JSON SCALAR— уточняющие проверки.
Полиморфные табличные функции
В SQL:2016 появились полиморфные табличные функции (PTF — Polymorphic Table Functions). Это функции, которые могут принимать и возвращать таблицы с произвольной структурой столбцов, определяемой на этапе выполнения. Они позволяют создавать обобщённые обработчики данных, например, для трансформации или фильтрации, без необходимости заранее знать схему входных данных.
Расширения для работы с графами
Хотя полноценная поддержка графовых моделей появилась позже (в SQL:2023), SQL:2016 ввёл ряд конструкций, облегчающих работу с иерархическими и сетевыми структурами:
- Рекурсивные обобщённые табличные выражения (Recursive CTE) — уже были в SQL:1999, но в SQL:2016 уточнена семантика.
- Новые предикаты для работы с путями в графах (например,
CONNECT BY— остаётся диалектом Oracle, не вошёл в стандарт).
Пространственные данные
Стандарт SQL:2016 включил расширенную поддержку пространственных типов данных (геометрия и география), определённых в ISO/IEC 13249-3 (SQL/MM Spatial). Добавлены новые типы: ST_Geometry, ST_Point, ST_LineString, ST_Polygon, а также операторы и функции для их обработки (расстояние, пересечение, буфер).
Другие улучшения
- Улучшенная работа с временными данными: добавлены функции
PERIODиSYSTEM_TIMEдля поддержки темпоральных таблиц (впервые появились в SQL:2011, но в SQL:2016 расширены). - Новые агрегатные функции:
LISTAGG(объединение строк с разделителем),PERCENTILE_CONT,PERCENTILE_DISC(квантили). - Поддержка регулярных выражений: функции
REGEXP_LIKE,REGEXP_REPLACE,REGEXP_SUBSTR,REGEXP_COUNT(впервые стандартизированы в SQL:2016, хотя ранее были доступны в диалектах). - Расширение синтаксиса оконных функций: добавлены предложения
EXCLUDE,GROUPSиDISTINCTдля оконных рамок.
Критика и ограничения
Несмотря на значительный шаг вперёд, SQL:2016 подвергся критике со стороны сообщества разработчиков и вендоров СУБД:
- Неполная реализация JSON: стандарт не определяет бинарный формат JSON (BSON) и не поддерживает индексацию JSON-полей на уровне стандарта, что ограничивает производительность.
- Фрагментация поддержки: ни одна из крупных СУБД (Oracle, Microsoft SQL Server, PostgreSQL, MySQL) не реализовала SQL:2016 полностью. Каждая поддерживает лишь подмножество функций, часто с собственными расширениями.
- Сложность полиморфных функций: реализация PTF требует значительных изменений в ядре СУБД, и на момент выхода стандарта их поддержка отсутствовала в большинстве систем.
- Отсутствие полноценной графовой модели: стандарт не вводит отдельного графового типа данных или языка запросов к графам (это было сделано только в SQL:2023).
Влияние на индустрию
SQL:2016 оказал существенное влияние на развитие реляционных СУБД. Поддержка JSON стала обязательной функцией для современных баз данных, что привело к появлению гибридных систем (NewSQL), сочетающих реляционную и документную модели. PostgreSQL, начиная с версии 9.4, реализовал большую часть JSON-функций стандарта. Oracle Database 12c и Microsoft SQL Server 2016 также добавили поддержку JSON, хотя и с диалектными отличиями.
Стандарт SQL:2016 остаётся основой для большинства современных реализаций SQL, пока не будет полностью вытеснен SQL:2023, который включает поддержку графов, мультимодельных данных и улучшенную работу с JSON.
Источники
- ISO/IEC 9075:2016 — Information technology — Database languages — SQL
- ISO/IEC TR 19075-6:2014 — SQL Technical Reports — JSON support
- Melton, J. (2017). Understanding SQL:2016. Morgan Kaufmann.
- Eisenberg, A., & Melton, J. (2017). SQL:2016 — The New Standard. ACM SIGMOD Record, 46(1), 38-45.
- Документация PostgreSQL 9.4 — JSON Functions and Operators
- Документация Microsoft SQL Server 2016 — JSON Support
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →