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
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
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}" 
github actions UI 확인 후
 
 github actions가 정상적으로 끝났습니다. 모드가 삭제되었습니다.
끝맺다
dbt의 개발 환경 구성은 아직 최선의 실천을 결정하지 못한 것 같아서 제 디자인을 보여줄 수 있는 기회라고 생각해서 했습니다.더 좋은 방법이 있으면 알려주세요.
Reference
이 문제에 관하여(dbt의 개발 구성에 관하여), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ugmuka/articles/8bcfe1fc7c5b35텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)