Repolode
tobymao

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. 1

    Установите SQLGlot из PyPI

    pip3 install sqlglot
  2. 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 обновляется ежедневно.

Похожие проекты

Браузерный BI-инструмент с открытым исходным кодом для запросов к данным из множества SQL- и NoSQL-источников, их визуализации и совместного использования.

28,9 тыс.+19 за неделю4,6 тыс.PythonBSD-2-ClauseАктивно поддерживаетсяОбновлён 3 дня назад

Нативная библиотека на Rust для чтения и записи таблиц Delta Lake с привязками для Python, pandas и других инструментов работы с данными.

3,4 тыс.+3 за неделю700RustApache-2.0Активно поддерживаетсяОбновлён 15 часов назад

CLI-инструмент для копирования данных между базами данных, файлами и SaaS-платформами одной командой, без написания кода.

4 тыс.+4 за неделю169GoOtherОбновлён 16 часов назад

Платформа с открытым исходным кодом для сбора и маршрутизации событий в хранилища данных и SaaS-сервисы — самостоятельная альтернатива Segment.

Данные и аналитика#event-tracking#data-pipeline#data-ingestion
5,1 тыс.+7 за неделю405TypeScriptMITОбновлён 19 часов назад