Repolode
tobymao

tobymao/sqlglot

30개 이상의 SQL dialect 간에 쿼리를 변환하는 무의존성 Python SQL 파서, transpiler, optimizer 및 엔진입니다.

스타
9,766
포크
1,386
열린 이슈
13
마지막 커밋
22시간 전

어떤 프로젝트인가요?

SQLGlot은 SQL을 표현식 트리로 파싱한 뒤 다른 dialect의 SQL로 다시 생성합니다. 따라서 DuckDB, Presto 또는 Trino, Spark 또는 Databricks, Snowflake, BigQuery 등에서 작성한 쿼리를 서로 변환할 수 있습니다. SQL을 재정렬하고, 가능한 범위에서 주석을 보존하며, 구문 오류나 대상 dialect에서 표현할 수 없는 구문도 알려줍니다.

transpilation 외에도 쿼리를 생성하고 수정하는 프로그래밍 API, AST를 순회하고 변환하는 기능, 스키마 정보를 제공하면 쿼리를 정규 형태로 다시 작성하는 optimizer를 제공합니다. 테스트에 유용한, Python dictionary를 대상으로 쿼리를 실행하는 소규모 인메모리 SQL executor도 포함되어 있습니다. 하위 클래스를 만들거나 별도 패키지로 배포되는 플러그인을 통해 커스텀 dialect를 추가할 수 있습니다.

필수 의존성이 없으며 순수 Python으로 작성되었습니다. 더 빠른 파싱을 위해 [c] extra로 설치할 수 있는 선택적 mypyc 컴파일 빌드도 제공됩니다.

핵심 기능

  • 0130개가 넘는 SQL dialect 간에 쿼리를 변환합니다.
  • 02SQL을 포맷하고 모든 식별자를 인용할 수 있습니다.
  • 03줄과 열 위치를 포함해 구문 오류를 보고합니다.
  • 04대상 dialect에서 지원하지 않는 구문이 있으면 경고하거나 오류를 발생시킵니다.
  • 05SQL 표현식 트리를 생성, 수정, 변환하는 API를 제공합니다.
  • 06optimizer와 소규모 인메모리 SQL executor를 포함합니다.

활용 사례

  • Snowflake나 BigQuery 같은 한 데이터 웨어하우스 엔진에서 다른 엔진으로 분석 쿼리를 마이그레이션합니다.
  • 여러 데이터베이스 백엔드의 SQL을 받아야 하는 데이터 도구를 개발합니다.
  • SQL을 린트하거나 분석해 쿼리에서 참조하는 테이블과 컬럼을 추출합니다.
  • 인메모리 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은(는) 무엇인가요?
30개 이상의 SQL dialect 간에 쿼리를 변환하는 무의존성 Python SQL 파서, transpiler, optimizer 및 엔진입니다. SQLGlot은 SQL을 표현식 트리로 파싱한 뒤 다른 dialect의 SQL로 다시 생성합니다. 따라서 DuckDB, Presto 또는 Trino, Spark 또는 Databricks, Snowflake, BigQuery 등에서 작성한 쿼리를 서로 변환할 수 있습니다. SQL을 재정렬하고, 가능한 범위에서 주석을 보존하며, 구문 오류나 대상 dialect에서 표현할 수 없는 구문도 알려줍니다.
sqlglot은(는) 무료로 사용할 수 있나요? 라이선스는 무엇인가요?
sqlglot은(는) MIT 라이선스의 오픈소스입니다. 상업용 제품에 사용하기 전에 라이선스 조건을 확인하세요.
sqlglot은(는) 아직 유지보수되고 있나요?
활발히 유지보수 중. sqlglot의 마지막 커밋은 2026년 11월 7일입니다.
sqlglot은(는) 어디에 사용할 수 있나요?
Snowflake나 BigQuery 같은 한 데이터 웨어하우스 엔진에서 다른 엔진으로 분석 쿼리를 마이그레이션합니다. 여러 데이터베이스 백엔드의 SQL을 받아야 하는 데이터 도구를 개발합니다. SQL을 린트하거나 분석해 쿼리에서 참조하는 테이블과 컬럼을 추출합니다. 인메모리 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 통계는 매일 갱신됩니다.

관련 프로젝트