{"id":855,"library":"dbt-extractor","title":"dbt-extractor","description":"dbt-extractor is a Python library that processes Jinja templates within dbt model files to analyze and extract metadata such as `ref`, `source`, and `config` calls. It is part of the `dbt-labs/dbt-parser-generator` repository. The tool, currently at version 0.6.0, prioritizes 100% certainty in its extraction, raising an exception if it cannot confidently extract values, rather than risking incorrect or incomplete output.","status":"active","version":"0.6.0","language":"python","source_language":"en","source_url":"https://github.com/dbt-labs/dbt-parser-generator/","tags":["dbt","jinja","sql","extractor","parsing","data-modeling"],"install":[{"cmd":"pip install dbt-extractor","lang":"bash","label":"Install with pip"}],"dependencies":[],"imports":[{"symbol":"extract_from_source","correct":"from dbt_extractor.main import extract_from_source"},{"symbol":"ExtractionError","correct":"from dbt_extractor.extractor import ExtractionError"}],"quickstart":{"code":"from dbt_extractor.main import extract_from_source\nfrom dbt_extractor.extractor import ExtractionError\n\ndbt_model_content = \"\"\"\nSELECT\n    {{ ref('my_model') }} as model_data,\n    {{ source('my_schema', 'my_table') }} as source_data,\n    {{ config(materialized='table') }}\nFROM some_table\n\"\"\"\n\ntry:\n    extracted_data = extract_from_source(dbt_model_content)\n    print(\"Extracted Refs:\", extracted_data.refs)\n    print(\"Extracted Sources:\", extracted_data.sources)\n    print(\"Extracted Configs:\", extracted_data.configs)\nexcept ExtractionError as e:\n    print(f\"Extraction failed: {e}\")","lang":"python","description":"This quickstart demonstrates how to use `dbt-extractor` to parse a dbt model's SQL content and extract references to other models (`ref`), sources (`source`), and configurations (`config`). If the extraction is not 100% certain, an `ExtractionError` will be raised."},"warnings":[{"fix":"Install Rust and Cargo via `rustup.rs` or your system's package manager before installing `dbt-extractor`.","message":"Installation of `dbt-extractor` requires a Rust toolchain (specifically `cargo`) to compile its underlying components. Users without Rust installed will encounter build errors during `pip install`.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Be prepared to handle `ExtractionError` and consider fallback mechanisms (e.g., dbt's native Jinja rendering) for complex or unsupported Jinja patterns.","message":"The library's core strategy is to be 100% certain about its extractions. If it encounters Jinja it cannot confidently parse and extract, it will raise an `ExtractionError` instead of returning potentially incomplete or incorrect results. This means some valid dbt Jinja might not be processed by `dbt-extractor` and may require alternative rendering.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Supplement `dbt-extractor` usage with other tools like SQL linters (e.g., SQLFluff) and comprehensive dbt tests to ensure SQL correctness and data integrity.","message":"`dbt-extractor` focuses on Jinja syntax extraction and does not perform validation of the underlying SQL syntax, schema existence, or data types. Errors in these areas will not be caught by `dbt-extractor` during compilation and will only manifest at runtime when dbt executes the SQL against your data warehouse.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Avoid using free-threaded Python 3.14t or newer versions until this issue is resolved. Stick to officially supported Python versions (currently `>=3.9`).","message":"There is an open bug where installation fails on free-threaded Python 3.14t, reporting an `ImportError: DLL load failed while importing dbt_extractor`.","severity":"bug","affected_versions":"0.6.0 (and potentially earlier) on Python 3.14t"}],"env_vars":null,"last_verified":"2026-05-12T20:26:35.549Z","next_check":"2026-06-27T00:00:00.000Z","problems":[{"fix":"Install Rust and Cargo by following the instructions on rustup.rs, then restart your shell and retry `pip install dbt-core` (or the specific dbt package that includes dbt-extractor).","cause":"dbt-extractor has Rust dependencies that require the Cargo package manager to be installed and accessible in the system's PATH during its installation process.","error":"Cargo, the Rust package manager, is not installed or is not on PATH"},{"fix":"Ensure your Python environment is correctly set up, consider reinstalling dbt-core and its dependencies in a fresh virtual environment, and verify that the necessary Microsoft Visual C++ Redistributables are installed for your Python version.","cause":"This error often occurs on Windows when dbt-extractor, a dependency of dbt-core, cannot find a required dynamic-link library (DLL), possibly due to issues with Python virtual environments or missing Visual C++ Redistributables.","error":"ImportError: DLL load failed while importing dbt_extractor: The specified procedure could not be found."},{"fix":"Simplify the Jinja logic within the dbt model, or use a workaround if the Jinja structure is beyond what dbt-extractor can currently confidently resolve. This might involve restructuring macros or variables.","cause":"dbt-extractor's strategy is to be 100% certain when extracting values from Jinja templates; if it encounters complex or ambiguous Jinja that it cannot confidently parse, it will raise an exception rather than risk incorrect extraction.","error":"[Bug] py_extract_from_source syntax errors for a seemingly correct dbt model sql"},{"fix":"Perform a clean reinstallation of dbt-core and its specific adapter (e.g., `dbt-snowflake`, `dbt-bigquery`) by first uninstalling all dbt-related packages and then reinstalling them in a fresh virtual environment.","cause":"This error typically indicates an incompatibility or corruption in the installation of dbt-core and its adapter packages, often seen after upgrades or when different versions of dbt components are mixed.","error":"ModuleNotFoundError: No module named 'dbt.adapters.factory'"}],"ecosystem":"pypi","meta_description":null,"install_score":0,"install_tag":"stale","quickstart_score":null,"quickstart_tag":null,"pypi_latest":"0.6.0","cli_name":"","install_checks":{"last_tested":"2026-05-12","tag":"stale","tag_description":"widespread failures or data too old to trust","installed_version":"0.6.0","pypi_latest":"0.6.0","is_stale":false,"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"dbt-extractor","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"19.2M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"dbt-extractor","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"dbt-extractor","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.5,"import_time_s":null,"mem_mb":null,"disk_size":"19M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"dbt-extractor","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"dbt-extractor","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"21.1M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"dbt-extractor","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"dbt-extractor","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.6,"import_time_s":null,"mem_mb":null,"disk_size":"21M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"dbt-extractor","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"dbt-extractor","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"12.9M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"dbt-extractor","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"dbt-extractor","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.5,"import_time_s":null,"mem_mb":null,"disk_size":"13M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"dbt-extractor","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"dbt-extractor","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"12.7M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"dbt-extractor","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"dbt-extractor","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.4,"import_time_s":null,"mem_mb":null,"disk_size":"13M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"dbt-extractor","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"dbt-extractor","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"18.7M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"dbt-extractor","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"dbt-extractor","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.8,"import_time_s":null,"mem_mb":null,"disk_size":"19M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"dbt-extractor","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null}]},"quickstart_checks":{"last_tested":"2026-04-24","tag":null,"tag_description":null,"results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}