{"library":"sqllineage","title":"SQL Lineage Analysis Tool","type":"library","description":"SQLLineage is a Python library designed for SQL lineage analysis, capable of identifying source and target tables, as well as providing column-level lineage from SQL queries. It leverages popular SQL parser libraries like sqlfluff and sqlparse, and uses networkx for graph representation. The library is actively maintained, with its current version being 1.5.7, and sees regular minor releases to introduce enhancements and bug fixes.","language":"python","status":"active","last_verified":"Thu May 21","install":{"commands":["pip install sqllineage"],"cli":{"name":"sqllineage","version":"sqllineage 1.5.8"}},"imports":["from sqllineage.runner import LineageRunner"],"auth":{"required":false,"env_vars":[]},"links":{"homepage":"https://reata.github.io/sqllineage/","github":"https://github.com/reata/sqllineage","docs":"https://sqllineage.readthedocs.io/en/latest/","changelog":"https://github.com/reata/sqllineage/releases","pypi":"https://pypi.org/project/sqllineage/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null},"quickstart":{"code":"from sqllineage.runner import LineageRunner\n\nsql = \"INSERT INTO target_schema.target_table SELECT col1, col2 FROM source_schema.source_table WHERE col3 > 100\"\n\nrunner = LineageRunner(sql)\n\nprint(f\"Source Tables: {[str(t) for t in runner.source_tables]}\")\nprint(f\"Target Tables: {[str(t) for t in runner.target_tables]}\")\n\n# For column-level lineage (requires metadata for full accuracy)\n# from sqllineage.core.metadata_provider import DummyMetaDataProvider\n# metadata = {\n#     'source_schema.source_table': ['col1', 'col2', 'col3']\n# }\n# runner_with_metadata = LineageRunner(sql, metadata_provider=DummyMetaDataProvider(metadata))\n# for path in runner_with_metadata.get_column_lineage():\n#     print(f\"Column Lineage: {path.source.column} -> {path.target.column}\")","lang":"python","description":"This quickstart demonstrates how to initialize `LineageRunner` with a SQL statement and extract the source and target tables. For accurate column-level lineage, especially with `SELECT *` or unqualified columns, providing a `MetaData` object (e.g., via `DummyMetaDataProvider` or `SQLAlchemyMetaDataProvider`) is crucial.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-21","installed_version":"1.5.6","pypi_latest":"1.5.8","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":9,"avg_import_s":3.93,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"sqllineage","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.91,"mem_mb":55.4,"disk_size":"164.6M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"sqllineage","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.49,"mem_mb":59.7,"disk_size":"168.1M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"sqllineage","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":9.7,"import_time_s":2.12,"mem_mb":55.4,"disk_size":"161M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"sqllineage","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.47,"mem_mb":59.6,"disk_size":"164M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"sqllineage","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.84,"mem_mb":57,"disk_size":"183.8M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"sqllineage","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":6.54,"mem_mb":62,"disk_size":"187.9M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"sqllineage","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":9,"import_time_s":4.45,"mem_mb":57,"disk_size":"179M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"sqllineage","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.92,"mem_mb":62,"disk_size":"183M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"sqllineage","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.09,"mem_mb":55.4,"disk_size":"169.7M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"sqllineage","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.87,"mem_mb":60.1,"disk_size":"173.7M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"sqllineage","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":8.5,"import_time_s":4.38,"mem_mb":55.3,"disk_size":"165M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"sqllineage","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":5.82,"mem_mb":60.1,"disk_size":"169M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"sqllineage","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":3.2,"mem_mb":53.1,"disk_size":"168.9M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"sqllineage","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.43,"mem_mb":59.2,"disk_size":"172.8M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"sqllineage","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":8.7,"import_time_s":3.41,"mem_mb":53.1,"disk_size":"164M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"sqllineage","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":4.49,"mem_mb":59.1,"disk_size":"168M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"sqllineage","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.88,"mem_mb":59.5,"disk_size":"87.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"sqllineage","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.38,"mem_mb":59.5,"disk_size":"87.9M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"sqllineage","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":9.3,"import_time_s":2.65,"mem_mb":59.5,"disk_size":"88M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"sqllineage","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":3.34,"mem_mb":59.5,"disk_size":"88M"}]}}