mindsdb dbt 扩展简单说明
mindsdb 提供了dbt 的adapter 利用了dbt 自定义物化的macro 实现一些资源的创建
目前提供的能力
- 支持integration
- predictor
- table
参考使用
一个简单示例
{{
config(
materialized='integration',
engine='trino',
parameters={
"user": env_var('TRINO_USER'),
"auth": "basic",
"http_scheme": "https",
"port": 443,
"password": env_var('TRINO_PASSWORD'),
"host": "trino.company.com",
"catalog": "hive",
"schema": "photorep_schema",
"with": "with (transactional = true)"
}
)
}}
内部处理简单说明
以简单的integration 作为例子说明
- adapter python 处理
内部基于了mysql connector 处理
- 参考macro 定义
此macro 的定义实际上就是sql 中的database 数据源的处理,只是因为特殊基于了内部的sql 进行包装
{% materialization integration, adapter='mindsdb' %}
{%- set database = model['alias'] -%}
{%- set engine = config.get('engine') -%}
{%- set prefix = config.get('prefix') -%}
{%- set parameters = config.get('parameters') -%}
{% if prefix is none %}
{%- set connector = database %}
{% else %}
{%- set connector = prefix ~ "_" ~ database %}
{% endif %}
-- build model
-- WA for https://github.com/mindsdb/mindsdb/issues/4152
{%- call statement('tables', fetch_result = True) -%}
SHOW DATABASES
{%- endcall -%}
{%- set tables = load_result('tables') -%}
{%- set tables_data = tables['data'] -%}
{%- set found_table = False -%}
{% for item in tables_data %}
{% if item[0] == connector %}
{%- call statement('main') -%}
DROP DATABASE IF EXISTS {{ connector }}
{%- endcall -%}
{% endif %}
{% endfor %}
-- end WA
{%- call statement('main') -%}
CREATE DATABASE {{ connector }} WITH ENGINE='{{engine}}',
PARAMETERS={{parameters}}
{%- endcall -%}
{{ log("Create mindsdb database(integration) \"" ~ connector ~ "\" with engine \"" ~ engine ~ "\"", True) }}
-- Return the relations created in this materialization
{{ return({'relations': []}) }}
{%- endmaterialization -%}
说明
mindsdb dbt 实现起来并不难,就是利用了标准的macro 扩展了物化macro,方便业务使用
浙公网安备 33010602011771号