Конвертер SQL-диалектов в YQL
Конвертер SQL-диалектов — это сервис, преобразующий SQL-запросы, написанные на других диалектах (PostgreSQL, MySQL, ClickHouse и других), в синтаксис YQL. Сервис предназначен для упрощения переноса существующих запросов в YDB и снижения порога входа для разработчиков, уже знакомых с другими СУБД.
Конвертер используется в плагине DBeaver для YDB на вкладке Convert Dialect. Пользователь вставляет запрос на исходном диалекте, выбирает диалект из списка и получает версию того же запроса на YQL.
Принцип работы
Преобразование выполняется в три этапа:
- Парсинг исходного SQL. Исходный запрос разбирается парсером конкретного диалекта в абстрактное синтаксическое дерево (AST) — структуру, описывающую смысл запроса независимо от синтаксиса.
- Трансформация AST. Специфичные для исходного диалекта конструкции заменяются на эквивалентные в YQL. Например, функции приведения типов, работа с датами и строками, операторы
LIMIT/OFFSETи конструкцииWITHадаптируются под правила YQL. - Генерация YQL. По изменённому AST генерируется текстовое представление запроса на YQL.
Этапы выполняются на базе библиотеки SQLGlot, в которой есть отдельный модуль-диалект для YDB. SQLGlot — SQL-парсер и транспилер с открытым исходным кодом, поддерживающий более двадцати диалектов. Он выполняет роль как парсера исходного запроса, так и генератора YQL.
Важно
Исходный запрос передаётся на внешний HTTPS-сервис. Не отправляйте в конвертер запросы, содержащие конфиденциальные данные (персональные данные, коммерческие тайны, идентификаторы реальных объектов в проде).
Поддерживаемые диалекты
Список исходных диалектов определяется набором, поддерживаемым SQLGlot. Среди основных:
- PostgreSQL;
- MySQL;
- ClickHouse;
- Microsoft SQL Server (T-SQL);
- Oracle;
- Snowflake;
- BigQuery;
- Presto / Trino;
- Spark SQL / Databricks;
- SQLite.
Актуальный полный список диалектов можно получить через API конвертера либо посмотреть в исходниках SQLGlot. Целевой диалект всегда один — YQL.
Поддерживаемые конструкции
Конвертер покрывает типовые конструкции аналитических и OLTP-запросов:
- Операторы выборки:
SELECT,JOIN(все виды),WHERE,GROUP BY,HAVING,ORDER BY,LIMIT,OFFSET. - Оконные функции (
OVER,PARTITION BY,ROWS BETWEEN). - Подзапросы и CTE (
WITH). - Приведение типов (
CAST,::), арифметические и логические операции. - Функции для строк, чисел, дат и времени — отображаются на ближайший эквивалент в YQL.
- Агрегатные функции (
COUNT,SUM,AVG,MIN,MAXи другие). - DML-операции:
INSERT,UPDATE,DELETE(с учётом особенностей транзакций YDB).
Ограничения
Полная автоматическая конвертация возможна не всегда, поскольку YQL и другие SQL-диалекты различаются в моделях данных и семантике операций. В частности:
- Специфичные для диалекта функции. Функции, не имеющие прямого аналога в YQL (например, массивы PostgreSQL,
JSON_EXTRACTMySQL с особенным синтаксисом путей), переводятся на приближённые эквиваленты либо оставляются для ручной доработки. - Хранимые процедуры и триггеры. Не поддерживаются, так как YDB использует другую модель выполнения кода в базе.
- Специфичный DDL.
CREATE TABLEдля сложных типов может требовать ручной корректировки с учётом колоночных и строковых таблиц в YDB. - Подсказки оптимизатору (hints). Игнорируются: оптимизатор YDB имеет собственные механизмы управления.
Результат преобразования следует рассматривать как черновик: сложные запросы требуют ручной проверки и адаптации перед выполнением.