Браузерный BI-инструмент с открытым исходным кодом для запросов к данным из множества SQL- и NoSQL-источников, их визуализации и совместного использования.
tobymao/sqlglot
Парсер, транспилятор, оптимизатор и движок SQL на Python без зависимостей, переводящий запросы между более чем 30 диалектами SQL.
- Звёзды
- 9,764
- Форки
- 1,387
- Открытые issues
- 13
- Последний коммит
- 12 часов назад
Что это?
SQLGlot разбирает SQL в дерево выражений и генерирует его в другом диалекте. Благодаря этому запросы для DuckDB, Presto или Trino, Spark или Databricks, Snowflake, BigQuery и других систем можно переводить между ними. Библиотека также умеет форматировать SQL, по возможности сохранять комментарии и сообщать о синтаксических ошибках или конструкциях, которые нельзя выразить в целевом диалекте.
Помимо транспиляции, библиотека предоставляет программный API для создания и изменения запросов, обхода и преобразования AST, а также оптимизатор, который приводит запросы к канонической форме, если указана информация о схеме. В комплект входит небольшой SQL-исполнитель в памяти, запускающий запросы над словарями Python; он пригодится для тестов. Добавлять собственные диалекты можно через наследование или отдельные плагины.
У пакета нет обязательных зависимостей, он написан на чистом Python. Для ускорения разбора доступна дополнительная сборка, скомпилированная с помощью mypyc и устанавливаемая с extra [c].
Ключевые возможности
- 01Переводит запросы между более чем 30 диалектами SQL.
- 02Форматирует SQL и умеет заключать все идентификаторы в кавычки.
- 03Сообщает о синтаксических ошибках, указывая номера строк и столбцов.
- 04Предупреждает о конструкциях, не поддерживаемых целевым диалектом, или вызывает ошибку.
- 05Предоставляет API для создания, изменения и преобразования деревьев SQL-выражений.
- 06Включает оптимизатор и небольшой SQL-исполнитель в памяти.
Сценарии использования
- Перенос аналитических запросов из одного движка хранилища, например Snowflake или BigQuery, в другой.
- Создание инструментов для работы с данными, которые должны принимать SQL для разных баз данных.
- Линтинг и анализ SQL, например для извлечения таблиц и столбцов, используемых в запросе.
- Написание модульных тестов для SQL-логики на данных в памяти Python.
Быстрый старт
- 1
Установите SQLGlot из PyPI
pip3 install sqlglot - 2
Разберите и преобразуйте запрос из Spark для DuckDB на Python
python -c "import sqlglot; print(sqlglot.transpile('SELECT EPOCH_MS(1618088028295)', read='duckdb', write='hive')[0])"
Что важно знать
- Парсер работает с допусками, поэтому он может принять некорректный SQL, который завершится ошибкой только при выполнении.
- Для некоторых пар диалектов поддержка преобразования неполная. Для неподдерживаемых функций выводится результат, насколько это возможно, с предупреждениями.
В подборках
Темы
Частые вопросы
- Что такое sqlglot?
- Парсер, транспилятор, оптимизатор и движок SQL на Python без зависимостей, переводящий запросы между более чем 30 диалектами SQL. SQLGlot разбирает SQL в дерево выражений и генерирует его в другом диалекте. Благодаря этому запросы для DuckDB, Presto или Trino, Spark или Databricks, Snowflake, BigQuery и других систем можно переводить между ними. Библиотека также умеет форматировать SQL, по возможности сохранять комментарии и сообщать о синтаксических ошибках или конструкциях, которые нельзя выразить в целевом диалекте.
- sqlglot можно использовать бесплатно? Какая у него лицензия?
- sqlglot распространяется с открытым исходным кодом под лицензией MIT. Перед использованием в коммерческих продуктах проверьте условия лицензии.
- sqlglot всё ещё поддерживается?
- Активно поддерживается. Последний коммит в sqlglot — 6 нояб. 2026 г..
- Для чего можно использовать sqlglot?
- Перенос аналитических запросов из одного движка хранилища, например Snowflake или BigQuery, в другой. Создание инструментов для работы с данными, которые должны принимать SQL для разных баз данных. Линтинг и анализ SQL, например для извлечения таблиц и столбцов, используемых в запросе. Написание модульных тестов для SQL-логики на данных в памяти Python.
- Как установить sqlglot?
- Установите SQLGlot из PyPI: pip3 install sqlglot Разберите и преобразуйте запрос из Spark для DuckDB на Python: python -c "import sqlglot; print(sqlglot.transpile('SELECT EPOCH_MS(1618088028295)', read='duckdb', write='hive')[0])"
- Где скачать sqlglot?
- Исходный код и инструкции по установке — на GitHub: https://github.com/tobymao/sqlglot
Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.
Похожие проекты
SQL-транспайлер на Rust/WASM для парсинга, генерации, транспиляции и форматирования SQL более чем в 30 диалектах, вдохновлённый sqlglot.
Нативная библиотека на Rust для чтения и записи таблиц Delta Lake с привязками для Python, pandas и других инструментов работы с данными.
CLI-инструмент для копирования данных между базами данных, файлами и SaaS-платформами одной командой, без написания кода.
Open-source платформа для перемещения данных в ELT-пайплайнах: из API, баз данных и файлов в хранилища, озёра данных и AI-приложения.
Платформа с открытым исходным кодом для сбора и маршрутизации событий в хранилища данных и SaaS-сервисы — самостоятельная альтернатива Segment.