dbt의 개발 구성에 관하여
16619 단어 GitHub ActionsSnowflakedbttech
개시하다
회사 내부에서dbt개발 시 환경 구성을 논의했기 때문에 자신의 구성을 총결하였다.
개요
dbt로 개발 환경, 정식 환경 등을 분할할 때 분리
profiles.yml
의 target을 통해 디버깅 목적지를 전환할 수 있습니다.그러나 여러 사람이 개발을 진행할 때 같은 환경dbt run
에 대해 집행하면 매번 데이터 슈퍼마켓을 고쳐 개발하기 어렵다.이번에 우리는dbt의 사용자 정의 모델 기능을 채택하여 모든 개발 지점에서 모델을 생성하였다.그러나 무궁무진한 패턴이 생성되면 개발 환경이 분산되기 때문에 github actions를 사용해 CI/CD를 조합해 PR 병합 시 생성된 패턴을 삭제할 수 있다.
견본
여기에 전선이 놓여 있다.
전제 조건
폴더 구성
.
├── README.md
├── dbt_packages
├── dbt_project.yml
├── logs
├── macros
├── models
├── profiles
├── requirements.txt
├── seeds
├── target
└── venv
분기별 생성 모드
환경 변수에 분기 이름을 입력하려면direnv를 사용하십시오.
.envrc
export CURRENT_BRANCH="$(git branch --show-current | sed -e 's/\//_/g')"
포괄하다로 변환합니다.$ echo $CUURENT_BRANCH
feature_test
다음profiles.yml
에 지점 이름을 모드로 설정합니다.profiles.yml
dbt_sample:
target: dev
outputs:
dev:
type: snowflake
account: "{{ env_var('SNOWFLAKE_ACCOUNT') }}"
user: "{{ env_var('SNOWFLAKE_USERNAME') }}"
password: "{{ env_var('SNOWFLAKE_PASSWORD') }}"
role: DEVELOPER_ROLE
database: TEST_DB
warehouse: TEST_WH
schema: "{{ env_var('CURRENT_BRANCH') }}" # branch name
threads: 1
client_session_keep_alive: False
query_tag: DBT
모든 모델의 모드 이름을 설정합니다.dbt_project.yml
name: 'jaffle_shop'
config-version: 2
version: '0.1'
profile: 'dbt_sample'
model-paths: ["models"]
seed-paths: ["seeds"]
test-paths: ["tests"]
analysis-paths: ["analysis"]
macro-paths: ["macros"]
target-path: "target"
clean-targets:
- "target"
- "dbt_modules"
- "logs"
require-dbt-version: [">=1.0.0", "<2.0.0"]
models:
jaffle_shop:
materialized: table
+schema: raw
staging:
materialized: view
+schema: staging
seeds:
jaffle_shop:
+database: test_db
+schema: raw
마지막으로 개발자 지점과main 지점에서 이미 정해진 패턴 이름macros
이하custom을 사용합니다schema 값의 매크로를 설정합니다.macros/generate_schema_name.sql
{% macro generate_schema_name(custom_schema_name, node) -%}
{%- set default_schema = target.schema -%}
{%- if default_schema=='main' or default_schema=='develop' -%}
{{ custom_schema_name }}
{%- else -%}
{{ default_schema }}_{{ custom_schema_name | trim }}
{%- endif -%}
{%- endmacro %}
dbt seed
에 테스트 데이터를 삽입하여 실행dbt run
.Snowflake UI 에서 모드 확인 후
raw
와staging
모델 외에도 feature_test_raw
와feature_test_staging
도 알 수 있다.참고 자료
dbt에 대한 사용자 정의 모드
PR 결합 후 삭제 모드
snowsql에서 실행할 수 있도록github actions를 구성합니다
drop schema
.시크릿을 Snowflak 계정으로 설정하십시오.
.github/workflows/drop_schema.yml
name: drop_schema
on:
pull_request:
types: [closed]
jobs:
drop-schema:
if: github.event.pull_request.merged == true
runs-on: ubuntu-20.04
container:
image: python:3.8-slim
steps:
- uses: actions/checkout@v2
- env:
BRANCH_NAME: ${{github.head_ref}}
SNOWSQL_ACCOUNT: ${{secrets.SNOWSQL_ACCOUNT}}
SNOWSQL_USER: ${{secrets.SNOWSQL_USER}}
SNOWSQL_DATABASE: ${{secrets.SNOWSQL_DATABASE}}
SNOWSQL_ROLE: ${{secrets.SNOWSQL_ROLE}}
SNOWSQL_WAREHOUSE: ${{secrets.SNOWSQL_WAREHOUSE}}
SNOWSQL_PWD: ${{secrets.SNOWSQL_PWD}}
run: ./.github/workflows/drop_schema.sh
셸 스크립트에 snowsql을 설치하여 SQL을 실행합니다.drop_schema.sh
#!/bin/bash
# get snowsql
apt update
apt-get install -y curl unzip
curl -O https://sfc-repo.snowflakecomputing.com/snowsql/bootstrap/1.2/linux_x86_64/snowsql-1.2.21-linux_x86_64.bash
SNOWSQL_DEST=/root/bin SNOWSQL_LOGIN_SHELL=/root/.profile bash ./snowsql-1.2.21-linux_x86_64.bash
alias snowsql=/root/bin/snowsql
# drop schema
branch_name="$(echo $BRANCH_NAME | sed -e 's/refs\/heads//g' | sed -e 's/\//_/g')"
sql="drop schema ${branch_name}_raw;"
/root/bin/snowsql -q "${sql}"
sql="drop schema ${branch_name}_staging;"
/root/bin/snowsql -q "${sql}"
이렇게 하면 적절한 PR을 보내 합병할 수 있다.github actions UI 확인 후
github actions가 정상적으로 끝났습니다. 모드가 삭제되었습니다.
끝맺다
dbt의 개발 환경 구성은 아직 최선의 실천을 결정하지 못한 것 같아서 제 디자인을 보여줄 수 있는 기회라고 생각해서 했습니다.더 좋은 방법이 있으면 알려주세요.
Reference
이 문제에 관하여(dbt의 개발 구성에 관하여), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ugmuka/articles/8bcfe1fc7c5b35텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)