Repolode
tobymao

tobymao/sqlglot

依存関係不要のPython製SQLパーサー、トランスパイラー、オプティマイザー、エンジン。30以上のSQL方言間でクエリを変換します。

スター
9,764
フォーク
1,387
未解決の Issue
13
最終コミット
11 時間前

これは何?

SQLGlotはSQLを式ツリーにパースし、別の方言で再生成します。そのため、DuckDB、PrestoやTrino、SparkやDatabricks、Snowflake、BigQueryなど向けに書かれたクエリを相互に変換できます。また、SQLの整形、可能な範囲でのコメント保持、構文エラーや変換先の方言では表現できない構文の報告にも対応しています。

トランスパイルに加えて、クエリの構築・変更、ASTの走査・変換を行うプログラム向けAPIと、スキーマ情報を指定するとクエリを標準形に書き換えるオプティマイザーを備えています。テストに便利な、Pythonの辞書を対象にクエリを実行できる小規模なインメモリSQL実行エンジンも含まれています。サブクラス化するか、個別にパッケージ化されたプラグインを使って、独自の方言を追加できます。

このパッケージに必須の依存関係はなく、純粋なPythonで実装されています。より高速なパースを実現するため、[c] extraを指定してインストールできる、任意のmypycコンパイル版も用意されています。

主な機能

  • 0130以上のSQL方言間でクエリを変換します。
  • 02SQLを整形し、すべての識別子を引用符で囲めます。
  • 03構文エラーの行番号と列番号を報告します。
  • 04変換先の方言でサポートされていない構文について、警告するかエラーを発生させます。
  • 05SQL式ツリーの構築、変更、変換を行うAPIを提供します。
  • 06オプティマイザーと小規模なインメモリSQL実行エンジンを備えています。

ユースケース

  • SnowflakeやBigQueryなど、あるウェアハウスエンジンから別のエンジンへ分析クエリを移行する。
  • 複数のデータベースバックエンドからのSQLを受け付けるデータツールを構築する。
  • SQLのlintや解析を行い、クエリで参照されるテーブルやカラムを抽出する。
  • インメモリのPythonデータを使って、SQLロジックのユニットテストを書く。

クイックスタート

  1. 1

    PyPIからSQLGlotをインストールする

    pip3 install sqlglot
  2. 2

    PythonでSparkのクエリをDuckDB向けに解析・変換する

    python -c "import sqlglot; print(sqlglot.transpile('SELECT EPOCH_MS(1618088028295)', read='duckdb', write='hive')[0])"

使う前に知っておきたいこと

  • 解析は寛容なため、無効なSQLが受け入れられ、実行時になって初めて失敗する場合があります。
  • 一部の方言の組み合わせでは翻訳の対応範囲が不完全です。未対応の機能は警告とともに、可能な範囲で変換されます。

収録されている特集

トピック

よくある質問

sqlglot とは?
依存関係不要のPython製SQLパーサー、トランスパイラー、オプティマイザー、エンジン。30以上のSQL方言間でクエリを変換します。 SQLGlotはSQLを式ツリーにパースし、別の方言で再生成します。そのため、DuckDB、PrestoやTrino、SparkやDatabricks、Snowflake、BigQueryなど向けに書かれたクエリを相互に変換できます。また、SQLの整形、可能な範囲でのコメント保持、構文エラーや変換先の方言では表現できない構文の報告にも対応しています。
sqlglot は無料で使えますか?ライセンスは?
sqlglot は MIT ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
sqlglot は今もメンテナンスされていますか?
活発にメンテナンス中。sqlglot の最終コミットは 2026年11月6日 です。
sqlglot は何に使えますか?
SnowflakeやBigQueryなど、あるウェアハウスエンジンから別のエンジンへ分析クエリを移行する。 複数のデータベースバックエンドからのSQLを受け付けるデータツールを構築する。 SQLのlintや解析を行い、クエリで参照されるテーブルやカラムを抽出する。 インメモリのPythonデータを使って、SQLロジックのユニットテストを書く。
sqlglot のインストール方法は?
PyPIからSQLGlotをインストールする: pip3 install sqlglot PythonでSparkのクエリをDuckDB向けに解析・変換する: python -c "import sqlglot; print(sqlglot.transpile('SELECT EPOCH_MS(1618088028295)', read='duckdb', write='hive')[0])"
sqlglot はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/tobymao/sqlglot

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト

イベントデータを収集し、データウェアハウスやSaaSツールにルーティングする、セルフホスト可能なオープンソースのSegment代替プラットフォーム。

データ・分析#event-tracking#data-pipeline#data-ingestion
5129+7 今週405TypeScriptMIT更新 18 時間前