Конвертер SQL-диалектов в YQL

Конвертер SQL-диалектов — это сервис, преобразующий SQL-запросы, написанные на других диалектах (PostgreSQL, MySQL, ClickHouse и других), в синтаксис YQL. Сервис предназначен для упрощения переноса существующих запросов в YDB и снижения порога входа для разработчиков, уже знакомых с другими СУБД.

Конвертер используется в плагине DBeaver для YDB на вкладке Convert Dialect. Пользователь вставляет запрос на исходном диалекте, выбирает диалект из списка и получает версию того же запроса на YQL.

Принцип работы

Преобразование выполняется в три этапа:

  1. Парсинг исходного SQL. Исходный запрос разбирается парсером конкретного диалекта в абстрактное синтаксическое дерево (AST) — структуру, описывающую смысл запроса независимо от синтаксиса.
  2. Трансформация AST. Специфичные для исходного диалекта конструкции заменяются на эквивалентные в YQL. Например, функции приведения типов, работа с датами и строками, операторы LIMIT/OFFSET и конструкции WITH адаптируются под правила YQL.
  3. Генерация 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_EXTRACT MySQL с особенным синтаксисом путей), переводятся на приближённые эквиваленты либо оставляются для ручной доработки.
  • Хранимые процедуры и триггеры. Не поддерживаются, так как YDB использует другую модель выполнения кода в базе.
  • Специфичный DDL. CREATE TABLE для сложных типов может требовать ручной корректировки с учётом колоночных и строковых таблиц в YDB.
  • Подсказки оптимизатору (hints). Игнорируются: оптимизатор YDB имеет собственные механизмы управления.

Результат преобразования следует рассматривать как черновик: сложные запросы требуют ручной проверки и адаптации перед выполнением.

См. также

Предыдущая
Следующая