Oracle 설정
Oracle 설정
Oracle용 dbt 어댑터(dbt-oracle)의 설정을 정리한 페이지예요. 병렬 실행 힌트, 테이블 압축 절, 파티셔닝, 그리고 v$session에서 dbt 세션을 추적하기 위한 세션 정보 설정을 소개해요. (dbt v1.3.2 이상에 적용돼요.)
출처: dbt 공식 문서
본문
parallel 힌트 사용하기
Table materialization은 아래와 같이 병렬 실행 개수를 지정할 수 있어요.
-- Create a dbt model using 4 parallel executions
{{config(materialized='table', parallel=4}}
SELECT c.cust_id, c.cust_first_name, c.cust_last_name
from {{ source('sh_database', 'customers') }} c
table_compression_clause 사용하기
Table materialization은 아래와 같이 다양한 압축 절을 지원해요.
Advanced Row Compression
Advanced 압축을 활성화하면 Oracle Database는 INSERT, UPDATE 같은 일반적인 DML을 포함한 모든 종류의 데이터 조작 연산 중에 압축을 유지해요. ROW STORE COMPRESS ADVANCED는 OLTP 시스템에서 권장돼요.
-- Advanced Row compression
{{config(materialized='table', table_compression_clause='ROW STORE COMPRESS ADVANCED')}}
SELECT c.cust_id, c.cust_first_name, c.cust_last_name
from {{ source('sh_database', 'customers') }} c
Hybrid Columnar Compression
쿼리용 (Querying)
COLUMN STORE COMPRESS FOR QUERY는 데이터 웨어하우스 환경에서 유용해요. 허용 값은 HIGH 또는 LOW이고, HIGH가 더 높은 압축률을 제공해요. 기본값은 HIGH예요.
{{config(materialized='table', table_compression_clause='COLUMN STORE COMPRESS FOR QUERY LOW')}}
SELECT c.cust_id, c.cust_first_name, c.cust_last_name
from {{ source('sh_database', 'customers') }} c
또는
{{config(materialized='table', table_compression_clause='COLUMN STORE COMPRESS FOR QUERY HIGH')}}
SELECT c.cust_id, c.cust_first_name, c.cust_last_name
from {{ source('sh_database', 'customers') }} c
보관용 (Archival)
COLUMN STORE COMPRESS FOR ARCHIVE는 COLUMN STORE COMPRESS FOR QUERY보다 더 높은 압축률을 지원하고 보관용으로 유용해요. 허용 값은 HIGH 또는 LOW이고, HIGH가 가장 높은 압축률을 제공해요. 기본값은 LOW예요.
{{config(materialized='table', table_compression_clause='COLUMN STORE COMPRESS FOR ARCHIVE LOW')}}
SELECT c.cust_id, c.cust_first_name, c.cust_last_name
from {{ source('sh_database', 'customers') }} c
또는
{{config(materialized='table', table_compression_clause='COLUMN STORE COMPRESS FOR ARCHIVE HIGH')}}
SELECT c.cust_id, c.cust_first_name, c.cust_last_name
from {{ source('sh_database', 'customers') }} c
파티셔닝
Table과 Incremental materialization 설정은 파티셔닝 절을 추가할 수 있어요.
{
config(
materialized='incremental',
unique_key='group_id',
parallel=4,
partition_config={"clause": "PARTITION BY HASH(PROD_NAME) PARTITIONS 4"},
table_compression_clause='COLUMN STORE COMPRESS FOR QUERY LOW')
}}
SELECT *
FROM {{ source('sh_database', 'sales') }}
v$session의 세션 정보
profiles.yml의 session_info 아래에 사용자 지정 세션 정보를 넣을 수 있어요.
dbt_test:
target: dev
outputs:
dev:
type: oracle
user: "{{ env_var('DBT_ORACLE_USER') }}"
pass: "{{ env_var('DBT_ORACLE_PASSWORD') }}"
database: "{{ env_var('DBT_ORACLE_DATABASE') }}"
tns_name: "{{ env_var('DBT_ORACLE_TNS_NAME') }}"
schema: "{{ env_var('DBT_ORACLE_SCHEMA') }}"
threads: 4
session_info:
action: "dbt run"
client_identifier: "dbt-unique-client-uuid"
client_info: "dbt Python3.9 thin driver"
module: "dbt-oracle-1.8.x"
이렇게 하면 데이터베이스 뷰 V$SESSION에서 dbt 세션을 추적하는 데 도움이 돼요.
더 알아보기 (Learn more)
- Oracle V$SESSION 뷰 — 세션 추적 참고
- Oracle 문서 — 공식 Oracle 참고 자료