개요
숫자 타입
Doris는 다음과 같은 숫자 데이터 타입을 지원합니다:
BOOLEAN
가능한 값은 두 가지로, 0은 거짓을, 1은 참을 나타냅니다.
자세한 내용은 BOOLEAN을 참조하세요.
정수
모두 부호 있는 정수입니다. INT 타입별로 차지하는 바이트 수와 표현할 수 있는 값의 범위가 다릅니다:
-
TINYINT: 1바이트, [-128, 127]
-
SMALLINT: 2바이트, [-32768, 32767]
-
INT: 4바이트, [-2147483648, 2147483647]
-
BIGINT: 8바이트, [-9223372036854775808, 9223372036854775807]
-
LARGEINT: 16바이트, [-2^127, 2^127 - 1]
부동소수점
근삿값을 저장하는 부동소수점 타입으로 FLOAT와 DOUBLE이 있으며, 일반적인 프로그래밍 언어의 float와 double에 해당합니다.
고정소수점
정확한 고정소수점 타입인 DECIMAL은 재무 계산 등 엄격한 정확도가 필요한 경우에 사용됩니다.
날짜 타입
날짜 타입에는 DATE, TIME, DATETIME, TIMESTAMP_NS, TIMESTAMPTZ가 있습니다. DATE는 일 단위 정밀도로 날짜를 저장합니다. DATETIME은 시간대 정보 없이 날짜와 시간을 최대 마이크로초 정밀도로 저장합니다. TIMESTAMP_NS는 시간대 정보 없이 날짜와 시간을 고정 나노초 정밀도로 저장하며, 지원 범위는 1677년부터 2262년까지입니다. TIME은 시간만 저장하며, 현재 테이블 저장을 지원하지 않으며 쿼리 처리 중에만 사용할 수 있습니다. TIMESTAMPTZ는 시간대를 인식하는 날짜 및 시간 타입으로, 값을 UTC로 저장하고 쿼리 시 세션 시간대에 따라 자동으로 변환합니다.
날짜 및 시간 타입으로 계산하거나 숫자 타입으로 변환할 때는 TIME_TO_SEC, DATE_DIFF, UNIX_TIMESTAMP 같은 함수를 사용하세요. 숫자 타입으로 직접 변환한 결과는 보장되지 않습니다.
자세한 내용은 DATE, TIME, DATETIME, TIMESTAMP_NS, TIMESTAMPTZ를 참조하세요.
문자열 타입
Doris는 고정 길이 문자열과 가변 길이 문자열을 모두 지원하며, 다음과 같은 타입이 있습니다:
-
CHAR(M): 고정 길이 문자열로, M은 바이트 길이입니다. M의 범위는 [1, 255]입니다.
-
VARCHAR(M): 가변 길이 문자열로, M은 최대 길이입니다. M의 범위는 [1, 65533]입니다.
-
STRING: 기본 최대 길이가 1,048,576바이트(1 MB)인 가변 길이 문자열입니다. 최대 길이는 2,147,483,643바이트(2 GB)까지 늘릴 수 있으며,
string_type_length_soft_limit_bytes설정으로 지정합니다.
바이너리 타입
- VARBINARY: 가변 길이 바이너리 바이트 시퀀스로, M은 최대 길이(바이트 단위)입니다. VARCHAR와 유사하지만 문자 집합이나 콜레이션 없이 바이트 단위로 저장하고 비교하므로, 파일 조각, 암호화된 데이터, 압축된 데이터 등 임의의 바이너리 데이터를 저장하는 데 적합합니다. 4.0부터 지원됩니다. 현재 Doris에서 테이블 생성과 저장에는 사용할 수 없지만, Catalog를 사용해 다른 데이터베이스의 BINARY 컬럼을 Doris에 매핑하여 사용할 수 있습니다.
반정형 타입
Doris는 JSON 데이터 처리를 위해 다양한 반정형 데이터 타입을 지원하며, 각 타입은 서로 다른 사용 사례에 맞게 설계되었습니다.
-
ARRAY / MAP / STRUCT: 중첩 데이터와 고정 스키마를 지원하므로, 사용자 행동 및 프로필 분석과 같은 분석 워크로드와 Parquet 같은 데이터 레이크 형식의 데이터 쿼리에 적합합니다. 고정 스키마를 사용하므로 동적 스키마 추론에 따른 오버헤드가 없어 쓰기 및 분석 성능이 높습니다.
-
VARIANT: 중첩 데이터와 유연한 스키마를 지원합니다. 로그, 트레이스, IoT 데이터 분석과 같은 분석 워크로드에 적합합니다. 유효한 JSON 데이터라면 무엇이든 수용할 수 있으며, 이 데이터는 컬럼 기반 저장 형식의 하위 컬럼으로 자동 확장됩니다. 이러한 방식으로 높은 저장 압축률과 데이터 집계, 필터링, 정렬 성능을 제공합니다.
-
JSON: 중첩 데이터와 유연한 스키마를 지원합니다. 동시성이 높은 포인트 쿼리 사용 사례에 최적화되어 있습니다. 유연한 스키마 덕분에 유효한 JSON 데이터라면 무엇이든 수집할 수 있으며, 이 데이터는 바이너리 형식으로 저장됩니다. 이 바이너리 JSON 형식에서 필드를 추출하는 속도는 일반 JSON 문자열을 사용할 때보다 2배 넘게 빠릅니다.
집계 타입
집계 데이터 타입은 집계 결과나 집계 중의 중간 결과를 저장합니다. 집계 작업이 많은 쿼리의 속도를 높이는 데 사용됩니다.
-
BITMAP: UV 통계와 사용자 세분화 등에서 정확한 중복 제거에 사용됩니다.
bitmap_union,bitmap_union_count,bitmap_hash,bitmap_hash64같은 BITMAP 함수와 함께 사용합니다. -
HLL: 근사 중복 제거에 사용되며,
COUNT DISTINCT보다 성능이 좋습니다.hll_union_agg,hll_raw_agg,hll_cardinality,hll_hash같은 HLL 함수와 함께 사용합니다. -
QUANTILE_STATE: 근사 백분위수 계산에 사용되며,
PERCENTILE함수보다 성능이 좋습니다.QUANTILE_PERCENT,QUANTILE_UNION,TO_QUANTILE_STATE같은 함수와 함께 사용합니다. -
AGG_STATE: state/merge/union 같은 집계 함수 조합자와 함께 사용하여 집계 속도를 높입니다.
IP 타입
IP 데이터 타입은 IP 주소를 바이너리 형식으로 저장하므로, 문자열로 저장할 때보다 쿼리 속도가 빠르고 공간 효율이 높습니다. 지원하는 IP 데이터 타입은 두 가지입니다:
- IPv4: IPv4 주소를 4바이트 바이너리 값으로 저장합니다.
ipv4_*계열 함수와 함께 사용합니다. - IPv6: IPv6 주소를 16바이트 바이너리 값으로 저장합니다.
ipv6_*계열 함수와 함께 사용합니다.
UUID
UUID는 고정 16바이트 공간에 저장되는 128비트 식별자 타입입니다. 표준 형식이나 축약 형식의 십육진수 텍스트를 입력받고 소문자 표준 형식의 텍스트를 출력하며, 비교, 정렬, 그룹화 및 조인을 지원합니다.