access

access

모델의 접근 레벨을 지정하는 설정이에요. private, protected, public 중에서 선택할 수 있고, 기본값은 protected예요.

출처: 문서

본문

models/<schema>.yml:

models:
  - name: model_name
    config:
      access: private | protected | public
# changed to config in v1.10

config 파일(dbt_project.yml 포함)에서 접근 수정자를 적용하거나, properties.yml에서 모델별로 하나씩 적용할 수 있어요. 하위 폴더에 access 설정을 적용하면 해당 하위 폴더의 모든 모델 기본값이 변경되므로, 이 동작을 의도했는지 반드시 확인하세요. 개별 모델 접근을 설정할 때는 그룹이나 하위 폴더가 다양한 접근 레벨을 포함할 수 있으므로, 모델을 access: public으로 지정할 때도 의도했는지 확인하세요.

호환성을 위해 access는 최상위 키로 지원되지만, config 상속 기능은 없어요.

access를 설정하는 방법은 여러 가지가 있어요:

  • properties.yml에서 구식 방법으로 (dbt v1.9 이하) — 모델 바로 아래 최상위에: models/properties_my_public_model.yml:
    models:
      - name: my_public_model
        access: public
    
  • properties.yml에서 최신 방법으로 (v1.10 이상) — 같은 모델에 구식 방법과 최신 방법을 동시에 쓰지 마세요: models/properties_my_public_model.yml:
    models:
      - name: my_public_model
        config:
          access: public
    
  • dbt_project.yml에서: dbt_project.yml:
    models:
      my_project_name:
        subfolder_name:
          +group: my_group
          +access: private  # sets default for all models in this subfolder
    
  • my_public_model.sql 파일에서: models/my_public_model.sql:
    -- models/my_public_model.sql
    {{ config(
        access = "public"
    ) }}
    
    select ...
    

access를 정의한 뒤에는 변경 사항을 적용하려면 프로덕션 작업(production job)을 다시 실행하세요.

정의 (Definition)

속성을 선언하는 모델의 접근 레벨이에요.

일부(전부는 아닌) 모델은 그룹 간 ref 함수를 통해 참조되도록 설계돼요.

Access Referenceable by
private Same group
protected Same project/package
public Any group, package, or project.

지원되는 접근 범위 밖에서 모델을 참조하려 하면 에러가 발생해요:

dbt run -s marketing_model
...
dbt.exceptions.DbtReferenceError: Parsing Error
  Node model.jaffle_shop.marketing_model attempted to reference
  node model.jaffle_shop.finance_model,
  which is not allowed because the referenced
  node is private to the finance group.

(dbt v1.12 이상에 적용) 매크로가 dbt run-operation으로 호출될 때는 dbt가 모델 접근이나 그룹 제어를 강제하지 않아요. 따라서 ref()로 모든 모델(비공개·protected 포함)을 참조할 수 있어요.

기본값 (Default)

기본적으로 모든 모델은 "protected"예요. 즉 같은 프로젝트의 다른 모델이 참조할 수 있어요.

  • Model Access
  • Group configuration

더 알아보기 (Learn more)

  • 리소스 설정 전체 목록은 Resource configurations 문서를 참고하세요.
  • group 설정을 함께 사용하면 그룹 단위로 접근 범위를 더 세밀하게 제어할 수 있어요.