DataBricks와 함께 시작하는 DataOps(1)

11186 단어 dbtDatabricks
전언
블록dbt의 로컬 어댑터가 등장했습니다.
dbt의 국내 인지도는 아직 높지 않지만 DataOps의 핵심 구성 요소로서 개인이 기대하는 도구다.예를 들어dbt는 간단한 SQL과 YAML의 설정 파일을 통해 데이터 가공 절차의 기록, 데이터 모델의 문서의 생성, 단일 테스트와 다른 관점을 통해 데이터 품질을 자동으로 테스트하는 등 각종 기능을 실현할 수 있다.
그것은 어디가 편합니까?나는 이것이 전달하기 어려운 도구라고 생각하기 때문에 실제 행동을 하면서dbt의 장점을 음미하고 싶다.
이쪽 기사는 참고dbt Core integration with Databricks로 기재되어 있습니다.
컨디션
Windows 10 Enterprise (version: 1909)
Visual Studio Code (version: 1.62.3)
Python 3.8.8
DataOps란
가나사가 발표한 고속자전거 2018년판에 등장하면서 시작됐다고 한다.
DevOps 등 xOps 트렌드에서 생겨난 트렌드에 대해 "데이터와 관련된 부서 간 지식, 기술, 아이디어의 격차를 메우고 자동적으로 활용해 협력 체제를 구축하자"고 깨달았습니다.
특히 데이터 과학 데이터 엔지니어 데이터 소유자(비즈니스 분야 전문가 보유) 3명 간이다.
기술 요소는 다음과 같은 내용으로 구성된다.
- ETL/DWH
- 데이터 디렉토리
- 데이터 정의
- 데이터 품질 자동 테스트
- 데이터 품질 모니터링, 예외 감지
- 임무 공개/스케줄링
dbt 정보
dbt에는 오픈 소스 dbt Core와 클라우드 서비스 버전의 dbt Cloud이 있습니다.
dbt Core는 SQL과 YAML 파일로 구성된 dbt 프로젝트와 CLI 도구를 통해 Databricks, snowflake, bigquery 등 DWH를 조회해 표와 뷰를 작성한다.
dbt Cloud은 dbt Core 외에도 팀 개발에 웹 기반 IDE, 스케줄러, dbt 문서 공유 등의 기능을 제공한다.
검증 프로세스
  • 환경 준비
  • dbt 프로젝트 제작
  • dbt의 모형 제작 및 집행 ← 이 글은 여기까지
  • 더 복잡한 모델의 제작과 집행
  • dbt의 테스트 실행
  • 1. 환경 준비
    작업 디렉토리 만들기
    mkdir dbt_demo
    cd dbt_demo
    
    가상 환경 만들기
    나는 pyenv로 파이톤의 버전을 관리하고venv로 가상 환경을 관리한다.
    pyenv local 3.8.8
    python -m venv venv
    .\venv\Scripts\activate
    
    dbt 등 pip 설치
    python -m pip install --upgrade pip
    pip install dbt-core dbt-databricks
    
    설치된 프로그램 라이브러리를 확인합니다.
    pip list | findstr "dbt databricks"
    
    databricks-sql-connector   0.9.3
    dbt                        0.21.1
    dbt-bigquery               0.21.1
    dbt-core                   0.21.1
    dbt-databricks             0.21.1
    dbt-extractor              0.4.0
    dbt-postgres               0.21.1
    dbt-redshift               0.21.1
    dbt-snowflake              0.21.1
    
    dbt의 버전을 확인합니다.
    dbt --version
    
    installed version: 1.0.0
       latest version: 1.0.0
    
    Up to date!
    
    Plugins:
      - databricks: 1.0.0
    
    Databricks SQL 엔드포인트 작성
    dbt에서 연결된 Databricks SQL 엔드포인트 만들기(일반적인 Cluster도 가능)
    SQL 엔드포인트의 경우 연결 정보가 Connection Details에 표시됩니다.

    액세스 토큰이 필요하므로 Createa personal access token 링크 오른쪽 아래
    미리 발행하다.
    양식 준비
    Databricks 노트북에서 먼저 다이몬즈 샘플 데이터에서 표를 작성합니다.
    csv_file = '/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv'
    
    df = (spark.read
        .format('csv')
        .option("header","true")
        .option("inferSchema", "true")
        .load(csv_file)
    )
    df.write.saveAsTable("diamonds")
    
    diamonds의 책상은 이렇습니다.
    display(df)
    

    2.dbt 프로젝트 제작
    프로젝트는 dbt 관리 단위로 SQL 및 YAML 파일로 구성됩니다.dbt init 명령을 실행하면 프로젝트를 서로 만들 수 있습니다.
    일반적으로 디렉터리 구조는 다음과 같다.
    ├─ dbt_project.yml
    ├─ README.md
    ├─ analyses
    ├─ data
    ├─ dbt_packages
    ├─ logs
    ├─ macros
    ├─ models
    ├─ snapshots
    └─ tests
    
    DWH 등과의 연결 정보는 위의 디렉토리 및 파일 외에도 ~/.dbt/profiles.yml에 기록됩니다.profile.yml의 구조는 다음과 같다.
    ~/.dbt/profiles.yml
    databricks_cluster:
      outputs:
        dev:
          host: xxxxx.cloud.databricks.com
          http_path: /sql/1.0/endpoints/8888
          schema: default
          threads: 1
          token: dapiXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
          type: databricks
      target: dev
    
    dbt init SQL 엔드포인트에 대한 연결 정보 및 액세스 토큰을 입력하는 명령을 실행합니다.
    dbt init demo_project
    
    00:00:00  Running with dbt=1.0.0
    00:00:00  Creating dbt configuration folder at ~\.dbt
    00:00:00  Setting up your profile.
    Which database would you like to use?
    [1] databricks
    
    (Don't see the one you want? https://docs.getdbt.com/docs/available-adapters)
    
    Enter a number: 1
    host (yourorg.databricks.com): xxxxx.cloud.databricks.com
    http_path (HTTP Path): /sql/1.0/endpoints/8888
    token (dapiXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX):
    schema (default schema that dbt will build objects in): default
    threads (1 or more) [1]: 1
    00:00:00  Profile databricks_cluster written to ~\.dbt\profiles.yml using target's profile_template.yml and your supplied values. Run 'dbt debug' to validate the connection.
    
    dbt에서 Databricks로의 SQL 엔드포인트 연결을 테스트합니다.
    cd demo_project
    dbt debug
    
    00:00:00  Running with dbt=1.0.0
    dbt version: 1.0.0
    python version: 3.8.8
    python path: ...\venv\scripts\python.exe
    os info: Windows-10-10.0.xx
    Using profiles.yml file at ~\.dbt\profiles.yml
    Using dbt_project.yml file at \dbt_demo\demo_project\dbt_project.yml
    
    Configuration:
      profiles.yml file [OK found and valid]
      dbt_project.yml file [OK found and valid]
    
    Required dependencies:
     - git [OK found]
    
    Connection:
      host: xxxxx.cloud.databricks.com
      http_path: /sql/1.0/endpoints/8888
      schema: default
      Connection test: [OK connection ok]
    
    All checks passed!
    
    3.dbt의 모형 제작 및 집행
    dbt의 모델은 dbt의 간을 처리하는 데이터 모델의 개념이지만 그 실체는 SELECT 문일 뿐이고 모델 디렉터리에서 SQL 파일로 설정됩니다.
    모델 자체는 SELECT 문서이지만 dbtprojet.yml 또는 모델 SQL 파일config의 블록에서 기술 모델 설정을 통해 dbt run 명령은 각 환경에 따라 보기와 표를 작성하고 모델 간의 의존 관계를 기록하며 유연하게 처리할 수 있다.
    공식 문서:dbt Models
    이번에는 SQL 파일config에 블록을 기술합니다.
    dbt_demo/demo_project/models/diamonds_four_cs.sql
    {{ config(
      materialized='table',
      file_format='delta'
    ) }}
    
    select carat, cut, color, clarity
    from diamonds
    
    dbt_demo/demo_project/models/diamonds_list_colors.sql
    select distinct color
    from {{ ref('diamonds_four_cs') }}
    sort by color asc
    
    dbt_demo/demo_project/models/diamonds_price.sql
    select color, avg(price) as price
    from dbt_schema.diamonds
    group by color
    order by price desc
    
    모델(SQL 파일)을 만든 후 dbt run 명령을 사용합니다.
    dbt run --model models/diamonds_four_cs.sql models/diamonds_list_colors.sql models/diamonds_prices.sql
    
    00:00:00  Running with dbt=1.0.0
    00:00:00  Found 5 models, 4 tests, 0 snapshots, 0 analyses, 190 macros, 0 operations, 0 seed files, 0 sources, 0 exposures, 0 metrics
    00:00:00
    00:00:00  Concurrency: 1 threads (target='dev')
    00:00:00
    00:00:00  1 of 3 START table model diamonds_four_cs............................ [RUN]
    00:00:00  1 of 3 OK created table model diamonds_four_cs....................... [OK in 4.03s]
    00:00:00  2 of 3 START view model diamonds_prices.............................. [RUN]
    00:00:00  2 of 3 OK created view model diamonds_prices......................... [OK in 1.05s]
    00:00:00  3 of 3 START view model diamonds_list_colors......................... [RUN]
    00:00:00  3 of 3 OK created view model diamonds_list_colors.................... [OK in 1.37s]
    00:00:00
    00:00:00  Finished running 1 table model, 2 view models in 10.51s.
    00:00:00
    00:00:00  Completed successfully
    00:00:00
    00:00:00  Done. PASS=3 WARN=0 ERROR=0 SKIP=0 TOTAL=3
    
    위와 같이 dbt에서 Databricks에 표와 보기를 만들 수 있습니다.

    dbt with Databrics로 시작하는 DataOps(2)에서 우리는 데이터 품질 테스트의 기능을 더욱 시도할 것이다.

    좋은 웹페이지 즐겨찾기