데이터 타입
데이터 타입 (Data Types)
아래 표는 모든 내장 범용 데이터 타입을 보여줘요. 별칭 컬럼에 나열된 대안들은 이 타입들을 가리키는 데도 사용할 수 있지만, 별칭은 SQL 표준의 일부가 아니므로 다른 데이터베이스 엔진에서는 받아들여지지 않을 수 있다는 점을 주의하세요. 함께 살펴볼까요?
출처: 문서
본문
범용 데이터 타입 (General-Purpose Data Types)
아래 표는 모든 내장 범용 데이터 타입을 보여줘요. 별칭 컬럼에 나열된 대안들은 이 타입들을 가리키는 데도 사용할 수 있어요. 단, 별칭은 SQL 표준의 일부가 아니므로 다른 데이터베이스 엔진에서는 받아들여지지 않을 수 있다는 점을 주의하세요.
| 이름 | 별칭 (Aliases) | 설명 (Description) |
|---|---|---|
BIGINT |
INT8, LONG |
부호 있는 8바이트 정수 |
BIT |
BITSTRING |
1과 0의 문자열 |
BLOB |
BYTEA, BINARY, VARBINARY |
가변 길이 이진 데이터 |
BIGNUM |
가변 길이 정수 | |
BOOLEAN |
BOOL, LOGICAL |
논리 Boolean (true / false) |
DATE |
달력 날짜 (year, month, day) | |
DECIMAL(prec, scale) |
NUMERIC(prec, scale) |
주어진 width(정밀도)와 scale을 가진 고정 정밀도 숫자, 기본값 prec = 18 및 scale = 3 |
DOUBLE |
FLOAT8 |
배정밀도 부동소수점 숫자 (8바이트) |
FLOAT |
FLOAT4, REAL |
단정밀도 부동소수점 숫자 (4바이트) |
HUGEINT |
부호 있는 16바이트 정수 | |
INTEGER |
INT4, INT, SIGNED |
부호 있는 4바이트 정수 |
INTERVAL |
날짜 / 시간 델타 | |
JSON |
JSON 객체 ([json 확장]({% link docs/current/data/json/overview.md %})을 통해) |
|
SMALLINT |
INT2, SHORT |
부호 있는 2바이트 정수 |
TIME |
하루 중 시간 (시간대 없음) | |
TIMESTAMP WITH TIME ZONE |
TIMESTAMPTZ |
현재 시간대를 사용하는 시간과 날짜의 조합 |
TIMESTAMP |
DATETIME |
시간과 날짜의 조합 |
TINYINT |
INT1 |
부호 있는 1바이트 정수 |
UBIGINT |
부호 없는 8바이트 정수 | |
UHUGEINT |
부호 없는 16바이트 정수 | |
UINTEGER |
부호 없는 4바이트 정수 | |
USMALLINT |
부호 없는 2바이트 정수 | |
UTINYINT |
부호 없는 1바이트 정수 | |
UUID |
[UUID 데이터 타입]({% link docs/current/sql/data_types/numeric.md %}#universally-unique-identifiers-uuids) | |
VARCHAR |
CHAR, BPCHAR, TEXT, STRING |
가변 길이 문자 문자열 |
수많은 타입 간의 암시적 및 명시적 타입 캐스팅이 가능해요. 자세한 내용은 [Typecasting]({% link docs/current/sql/data_types/typecasting.md %}) 페이지를 참고하세요.
중첩 / 복합 타입 (Nested / Composite Types)
DuckDB는 다섯 가지 중첩 데이터 타입을 지원해요: ARRAY, LIST, MAP, STRUCT, UNION. 각각 다른 사용 사례를 지원하고 다른 구조를 가져요.
| 이름 | 설명 (Description) | 컬럼에서 사용될 때의 규칙 (Rules when used in a column) | 값에서 빌드 (Build from values) | DDL/CREATE에서 정의 (Define in DDL/CREATE) |
|---|---|---|---|---|
[ARRAY]({% link docs/current/sql/data_types/array.md %}) |
같은 타입의 데이터 값들의 정렬된, 고정 길이 시퀀스. | 각 행은 ARRAY의 각 인스턴스 안에서 같은 데이터 타입과 같은 수의 요소를 가져야 해요. |
[1, 2, 3] |
INTEGER[3] |
[LIST]({% link docs/current/sql/data_types/list.md %}) |
같은 타입의 데이터 값들의 정렬된 시퀀스. | 각 행은 LIST의 각 인스턴스 안에서 같은 데이터 타입이어야 하지만, 요소 수는 아무거나 될 수 있어요. |
[1, 2, 3] |
INTEGER[] |
[MAP]({% link docs/current/sql/data_types/map.md %}) |
여러 named 값의 딕셔너리로, 각 키는 같은 타입이고 각 값은 같은 타입이에요. 키와 값은 어떤 타입이든 될 수 있고 서로 다른 타입이어도 돼요. | 행마다 다른 키를 가질 수 있어요. | map([1, 2], ['a', 'b']) |
MAP(INTEGER, VARCHAR) |
[STRUCT]({% link docs/current/sql/data_types/struct.md %}) |
여러 named 값의 딕셔너리로, 각 키는 문자열이지만 키마다 값 타입이 다를 수 있어요. | 각 행은 같은 키를 가져야 해요. | {'i': 42, 'j': 'a'} |
STRUCT(i INTEGER, j VARCHAR) |
[UNION]({% link docs/current/sql/data_types/union.md %}) |
여러 대체 데이터 타입의 결합으로, 각 값에 한 번에 그중 하나를 저장해요. union은 현재 설정된 멤버 타입을 검사하고 접근하기 위한 판별자 "tag" 값도 포함해요. | 행마다 union의 다른 멤버 타입으로 설정될 수 있어요. | union_value(num := 2) |
UNION(num INTEGER, text VARCHAR) |
[VARIANT]({% link docs/current/sql/data_types/variant.md %}) |
각 값이 자신의 타입 정보와 함께 자립적인 반구조화(semi-structured) 타입. | 각 행은 다른 타입의 값을 담을 수 있어요. | 42::VARIANT |
VARIANT |
대소문자 구분 규칙 (Rules for Case Sensitivity)
MAP의 키는 대소문자를 구분하지만, UNION과 STRUCT의 키는 대소문자를 구분하지 않아요.
예시는 [Rules for Case Sensitivity 섹션]({% link docs/current/sql/dialect/overview.md %}#case-sensitivity-of-keys-in-nested-data-structures)을 참고하세요.
중첩 타입 값 업데이트 (Updating Values of Nested Types)
중첩 타입의 값에 대해 _업데이트_를 수행할 때 DuckDB는 삭제 연산 후 삽입 연산을 수행해요. 명시적 인덱스나 기본 키/유니크 제약을 통해 ART 인덱스가 있는 테이블에서 사용하면 [예상치 못한 제약 위반]({% link docs/current/sql/indexes.md %}#constraint-checking-in-update-statements)이 발생할 수 있어요.
중첩 (Nesting)
ARRAY, LIST, MAP, STRUCT, UNION 타입은 타입 규칙을 지키는 한 어떤 깊이든 임의로 중첩될 수 있어요.
LIST를 가진 Struct:
SELECT {'birds': ['duck', 'goose', 'heron'], 'aliens': NULL, 'amphibians': ['frog', 'toad']};
MAP의 목록을 가진 Struct:
SELECT {'test': [MAP([1, 5], [42.1, 45]), MAP([1, 5], [42.1, 45])]};
UNION의 목록:
SELECT [union_value(num := 2), union_value(str := 'ABC')::UNION(str VARCHAR, num INTEGER)];
성능 영향 (Performance Implications)
데이터 타입의 선택은 성능에 큰 영향을 줄 수 있어요. 자세한 내용은 [Performance Guide]({% link docs/current/guides/performance/schema.md %})를 참고하세요.