AxelThevenot / dbt-star

Package to `SELECT *` without `SELECT *`

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

dbt-star

Alt text

License Static Badge GitHub Release GitHub (Pre-)Release Date

build status GitHub issues GitHub pull requests

Features

A dbt package to SELECT * without SELECT *!

🎯 Selective Column Inclusion: Generate exhaustive SELECT expressions for models and sources removing your old SELECT * from your queries, improving readability when compiled.

🚫 Configurable: Use the optional except argument to tailor the output by excluding specific columns. Enhance query clarity with the alias argument, especially useful for multiple model instances.

🌐 Cross-Platform Compatibility: Supports all data platforms, ensuring flexibility in your data stack.

Content

Install

dbt-star currently supports dbt 1.7.x or higher.

Check dbt github package for the latest installation instructions, or read the docs for more information on installing packages.

Include in packages.yml

packages:
  - git: https://github.com/AxelThevenot/dbt-star.git
    revision: 0.1.0
    # <see https://github.com/AxelThevenot/dbt-star/releases/latest> for the latest version tag

This package supports all data platforms:

  • AllowDB
  • BigQuery
  • Databricks
  • Dremio
  • Postgres
  • Redshift
  • Snowflake
  • Spark
  • Starbust/Trino
  • Microsoft Fabric
  • Azure Synapse
  • Teradata
  • ...

For latest release, see https://github.com/AxelThevenot/dbt-star/releases

Dependencies

This package do not have dependencies.

Variables

This package do not have variables.

Basic Example

You can see the basic star example here.

For even more basic. This package is made to remove SELECT * from your queries.

-- Old query
SELECT
    *
FROM {{ ref('my_model') }}

-- Reworked query
SELECT
    {{ dbt_star.star('my_model') | indent(4) }} -- reads from the `.yml` configuration
FROM {{ ref('my_model') }}

-- Compiled query
SELECT
    column_1,
    column_2,
    column_3
FROM {{ ref('my_model') }}

Documentation

Macros

star() generates a list of column names for a given model as your SELECT expression. It is callable the same way you call the native dbt ref(). (version argument is not supported yet)

WITH
    final AS (
        SELECT
          {{ dbt_star.star('my_model') }},
          CURRENT_TIMESTAMP() AS ingested_at
        FROM {{ ref('my_model') }}
    )
SELECT
    *
FROM final

You can call star() macro without providing model name and package. It will consider the current model configuration.

WITH
    final AS (
        SELECT
          {{ dbt_star.star('my_model') }},
          CURRENT_TIMESTAMP() AS ingested_at
        FROM {{ ref('my_model') }}
    )
SELECT
    {{ dbt_star.star() }}
FROM final

It supports optional except and alias arguments.


star_source() generates a list of column names for a given source as your SELECT expression. It is callable the same way you call the native dbt source().

WITH
    final AS (
        SELECT
          {{ dbt_star.star_source('source_name', 'table_name') }},
          CURRENT_TIMESTAMP() AS ingested_at
        FROM {{ source('source_name', 'table_name') }}
    )
SELECT
    *
FROM final

It supports optional except and alias arguments.


except argument

except (optional[list[str]]) argument is compatible with star() and [star_source()] macros. If provided, it contains the list of columns to exclude from the generated SELECT expressions.

SELECT
    {{ dbt_star.star('my_model', except=['i_dont_want_you', 'you_neither']) }}
FROM {{ ref('my_model') }}

alias argument

alias (optional[str]) argument is compatible with star() and [star_source()] macros. If provided, it prefixes the list of columns from the generated SELECT expressions.

SELECT
    {{ dbt_star.star('my_model', alias='model_1') | indent(4) }},
    model_2.column_a,
    model_2.column_b,
    model_2.column_c
FROM {{ ref('my_model') }} AS model_1
LEFT JOIN {{ ref('my_model') }} AS model_2
    ON model_1.column_1 = model_2.column_1

Is compiled as

SELECT
    model_1.column_1,
    model_1.column_2,
    model_1.column_3,
    ...
    model_2.column_a,
    model_2.column_b,
    model_2.column_c
FROM {{ ref('my_model') }} AS model_1
LEFT JOIN {{ ref('my_model') }} AS model_2
    ON model_1.column_1 = model_2.column_1

Contribution

If you want to contribute, please open a Pull Request or an Issue on this repo. Feel free to reach me Linkedin.

Contact

If you have any question, please open a new Issue or feel free to reach out to Linkedin


Happy coding with dbt-star!

About

Package to `SELECT *` without `SELECT *`

License:Apache License 2.0