플랫폼별 데이터 타입
플랫폼별 데이터 타입 (data types)
유닛 테스트(unit test)는 데이터 타입 자체가 아니라 기대하는 값을 검증하도록 설계돼 있어요. dbt는 여러분이 제공한 값을 입력·출력 모델에서 추론한 데이터 타입으로 캐스팅(cast)해요. 플랫폼별로 조금씩 다른 복잡한 데이터 타입 처리 방법을 살펴볼게요.
출처: 문서
본문
유닛 테스트 YAML 정의에서 입력·기대값을 지정하는 방식은 대부분의 데이터 웨어하우스에서 비슷하지만, 더 복잡한 데이터 타입에서는 차이가 좀 있어요. 다음은 플랫폼별 데이터 타입 예시예요.
Snowflake
unit_tests:
- name: test_my_data_types
model: fct_data_types
given:
- input: ref('stg_data_types')
rows:
- int_field: 1
float_field: 2.0
str_field: my_string
str_escaped_field: "my,cool'string"
date_field: 2020-01-02
timestamp_field: 2013-11-03 00:00:00-0
timestamptz_field: 2013-11-03 00:00:00-0
number_field: 3
variant_field: 3
geometry_field: POINT(1820.12 890.56)
geography_field: POINT(-122.35 37.55)
object_field: {'Alberta':'Edmonton','Manitoba':'Winnipeg'}
str_array_field: ['a','b','c']
int_array_field: [1, 2, 3]
binary_field: 19E1FFDCCB6CDEE788BF631C1C4905D1
BigQuery
unit_tests:
- name: test_my_data_types
model: fct_data_types
given:
- input: ref('stg_data_types')
rows:
- int_field: 1
float_field: 2.0
str_field: my_string
str_escaped_field: "my,cool'string"
date_field: 2020-01-02
timestamp_field: 2013-11-03 00:00:00-0
timestamptz_field: 2013-11-03 00:00:00-0
bigint_field: 1
geography_field: 'st_geogpoint(75, 45)'
json_field: {"name": "Cooper", "forname": "Alice"}
str_array_field: ['a','b','c']
int_array_field: [1, 2, 3]
date_array_field: ['2020-01-01']
struct_field: 'struct("Isha" as name, 22 as age)'
struct_of_struct_field: 'struct(struct(1 as id, "blue" as color) as my_struct)'
struct_array_field: ['struct(st_geogpoint(75, 45) as my_point)', 'struct(st_geogpoint(75, 35) as my_point)']
# Make sure to include all the fields in a BigQuery `struct` within the unit test.
# It's not currently possible to use only a subset of columns in a 'struct'
Redshift
unit_tests:
- name: test_my_data_types
model: fct_data_types
given:
- input: ref('stg_data_types')
rows:
- int_field: 1
float_field: 2.0
str_field: my_string
str_escaped_field: "my,cool'string"
date_field: 2020-01-02
timestamp_field: 2013-11-03 00:00:00-0
timestamptz_field: 2013-11-03 00:00:00-0
json_field: '{"bar": "baz", "balance": 7.77, "active": false}'
현재 array는 지원되지 않아요.
Spark
unit_tests:
- name: test_my_data_types
model: fct_data_types
given:
- input: ref('stg_data_types')
rows:
- int_field: 1
float_field: 2.0
str_field: my_string
str_escaped_field: "my,cool'string"
bool_field: true
date_field: 2020-01-02
timestamp_field: 2013-11-03 00:00:00-0
timestamptz_field: 2013-11-03 00:00:00-0
int_array_field: 'array(1, 2, 3)'
map_field: 'map("10", "t", "15", "f", "20", NULL)'
named_struct_field: 'named_struct("a", 1, "b", 2, "c", 3)'
Postgres
unit_tests:
- name: test_my_data_types
model: fct_data_types
given:
- input: ref('stg_data_types')
rows:
- int_field: 1
float_field: 2.0
numeric_field: 1
str_field: my_string
str_escaped_field: "my,cool'string"
bool_field: true
date_field: 2020-01-02
timestamp_field: 2013-11-03 00:00:00-0
timestamptz_field: 2013-11-03 00:00:00-0
json_field: '{"bar": "baz", "balance": 7.77, "active": false}'
현재 array는 지원되지 않아요.
더 알아보기 (Learn more)
- unit-tests 속성 — 유닛 테스트 정의
- data-formats 속성 — 유닛 테스트 데이터 형식(dict/csv/sql)