---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ydb.tech/docs/en/integrations/sql-translation/sql-dialect-converter.md?version=main
  - https://ydb.tech/docs/ru/integrations/sql-translation/sql-dialect-converter.md?version=main
sourcePath: ru/core/integrations/sql-translation/sql-dialect-converter.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

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

Конвертер SQL-диалектов — это сервис, преобразующий SQL-запросы, написанные на других диалектах (PostgreSQL, MySQL, ClickHouse и других), в синтаксис [YQL](https://ydb.tech/docs/ru/yql/reference/index.md?version=main). Сервис предназначен для упрощения переноса существующих запросов в YDB и снижения порога входа для разработчиков, уже знакомых с другими СУБД.

Конвертер доступен как отдельное веб-приложение по адресу [ydb-dialect-converter.website.yandexcloud.net](https://ydb-dialect-converter.website.yandexcloud.net/), а также встроен в [плагин DBeaver для YDB](https://ydb.tech/docs/ru/integrations/gui/dbeaver-plugin.md?version=main#convert-dialect) и [плагин VS Code для YDB](https://ydb.tech/docs/ru/integrations/gui/vscode-plugin.md?version=main). Пользователь вставляет запрос на исходном диалекте, выбирает диалект из списка и получает версию того же запроса на YQL.

## Как пользоваться {#usage}

1. Откройте [веб-интерфейс конвертера](https://ydb-dialect-converter.website.yandexcloud.net/).
2. Выберите исходный диалект SQL в выпадающем списке.
3. Вставьте запрос в поле **Входной SQL-запрос**. При необходимости воспользуйтесь готовыми примерами (`CTE Example`, `Create Table Example` и другими).
4. Нажмите **Конвертировать** — результат на YQL появится в поле **Результат конвертации (YDB)**.

## Принцип работы {#principles}

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

1. **Парсинг исходного SQL.** Исходный запрос разбирается парсером конкретного диалекта в абстрактное синтаксическое дерево (AST) — структуру, описывающую смысл запроса независимо от синтаксиса.
2. **Трансформация AST.** Специфичные для исходного диалекта конструкции заменяются на эквивалентные в YQL. Например, функции приведения типов, работа с датами и строками, операторы `LIMIT`/`OFFSET` и конструкции `WITH` адаптируются под правила YQL.
3. **Генерация YQL.** По изменённому AST генерируется текстовое представление запроса на YQL.

Этапы выполняются на базе библиотеки [SQLGlot](https://github.com/tobymao/sqlglot) и [плагина YDB для неё](https://ydb.tech/docs/ru/integrations/sql-translation/sqlglot.md?version=main), который добавляет в SQLGlot отдельный диалект YDB. SQLGlot — SQL-парсер и транспилер с открытым исходным кодом, поддерживающий более двадцати диалектов. Он выполняет роль как парсера исходного запроса, так и генератора YQL.

Если нужна не разовая конвертация в графическом интерфейсе, а встраивание преобразования в собственный код или конвейер обработки данных, используйте плагин напрямую — см. статью [SQLGlot](https://ydb.tech/docs/ru/integrations/sql-translation/sqlglot.md?version=main).

{% note warning %}

Исходный запрос передаётся на внешний HTTPS-сервис. Не отправляйте в конвертер запросы, содержащие конфиденциальные данные (персональные данные, коммерческие тайны, идентификаторы реальных объектов в проде).

{% endnote %}

## Поддерживаемые диалекты {#dialects}

Список исходных диалектов определяется набором, поддерживаемым SQLGlot. Среди основных:

- PostgreSQL;
- MySQL;
- ClickHouse;
- Microsoft SQL Server (T-SQL);
- Oracle;
- Snowflake;
- BigQuery;
- Presto / Trino;
- Spark SQL / Databricks;
- SQLite.

Актуальный полный список диалектов можно получить через API конвертера либо посмотреть в [исходниках SQLGlot](https://github.com/tobymao/sqlglot/tree/main/sqlglot/dialects). Целевой диалект всегда один — YQL.

## Поддерживаемые конструкции {#supported-constructs}

Конвертер покрывает типовые конструкции аналитических и 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](https://ydb.tech/docs/ru/concepts/transactions.md?version=main)).

## Ограничения {#limitations}

Полная автоматическая конвертация возможна не всегда, поскольку YQL и другие SQL-диалекты различаются в моделях данных и семантике операций. В частности:

- **Специфичные для диалекта функции.** Функции, не имеющие прямого аналога в YQL (например, массивы PostgreSQL, `JSON_EXTRACT` MySQL с особенным синтаксисом путей), переводятся на приближённые эквиваленты либо оставляются для ручной доработки.
- **Хранимые процедуры и триггеры.** Не поддерживаются, так как YDB использует другую модель выполнения кода в базе.
- **Специфичный DDL.** `CREATE TABLE` для сложных типов может требовать ручной корректировки с учётом [колоночных и строковых таблиц](https://ydb.tech/docs/ru/concepts/datamodel/table.md?version=main) в YDB.
- **Подсказки оптимизатору (hints).** Игнорируются: оптимизатор YDB имеет собственные механизмы управления.

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

## См. также {#see-also}

- [Веб-интерфейс конвертера SQL-диалектов](https://ydb-dialect-converter.website.yandexcloud.net/)
- [SQLGlot](https://ydb.tech/docs/ru/integrations/sql-translation/sqlglot.md?version=main)
- [Подключение к YDB с помощью плагина DBeaver](https://ydb.tech/docs/ru/integrations/gui/dbeaver-plugin.md?version=main)
- [YQL Reference](https://ydb.tech/docs/ru/yql/reference/index.md?version=main)
- [SQLGlot](https://github.com/tobymao/sqlglot)
