#sql #airflow #cli-tool #dbt #data-engineer

app badass

badass 是一个受 dbt 和 airflow 启发的 CLI 工具

3 个版本

0.1.2 2024年3月22日
0.1.1 2024年3月22日
0.1.0 2024年3月22日

#650数据库接口

每月 26 次下载

Apache-2.0

25KB
472

BADASS

BADASS 是一个受 DBTAirflow 启发的 CLI 工具。主要是我用来更熟悉 Rust 的游乐场。

配置

BADASS 使用 config-rs 在当前工作目录中搜索 BADASS 配置 (.toml, .json, .yaml 或 .ini)。还可以使用环境变量(以 BADASS_ 开头)覆盖设置

BADASS_output_compiled=/tmp/compiled badass settings
The settings are: 

Settings {
    models: Models {
        location: "./demo/models",
    },
    output: Output {
        compiled: "/tmp/compiled",
        materialized: "./target/materialized",
    },
    query_engine: QueryEngine {
        params: "host=localhost user=tim",
    },
}

功能

编译 SQL 模板

badass compile

我们利用 minijinja 生成 SQL 文件。

{% set payment_methods = ["bank_transfer", "credit_card", "gift_card"] %}
select
    order_id,
    {%- for payment_method in payment_methods %}
    sum(case when payment_method = '{{payment_method}}' then amount end) as {{payment_method}}_amount,
    {%- endfor %}
    sum(amount) as total_amount
from app_data.payments
group by 1

编译成以下内容

select
    order_id,
    sum(case when payment_method = 'bank_transfer' then amount end) as bank_transfer_amount,
    sum(case when payment_method = 'credit_card' then amount end) as credit_card_amount,
    sum(case when payment_method = 'gift_card' then amount end) as gift_card_amount,
    sum(amount) as total_amount
from app_data.payments
group by 1

查看(编译的)SQL 模板查询结果

badass show demo
.------------------------.
| Tim   | Van Wassenhove |
| Tiebe | Van Wassenhove |
| Amber | Van Wassenhove |
| Evy   | Penninckx      |
'------------------------'

实现 SQL 模板

badass materialize

使用(编译的)SQL 模板来构建数据库工件(表、视图等)

目前我们只渲染 CTAS,例如

SELECT * FROM foo

变为

CREATE TABLE xxx AS SELECT * FROM foo

依赖项

~13–24MB
~363K SLoC