SQL 및 PPL 데이터 타입
SQL 및 PPL 데이터 타입
SQL 플러그인이 지원하는 데이터 타입과 각각이 SQL, OpenSearch 데이터 타입에 어떻게 매핑되는지 보여주는 표예요. 이 목록 외에도 SQL 플러그인은 datetime 타입을 지원하지만, OpenSearch나 SQL과의 매핑은 없어요.
출처: 문서
본문
다음 표는 SQL 플러그인이 지원하는 데이터 타입과 각 타입이 SQL, OpenSearch 데이터 타입에 어떻게 매핑되는지 보여줘요.
| OpenSearch SQL type | OpenSearch type | SQL type |
|---|---|---|
boolean |
Boolean | BOOLEAN |
byte |
Byte | TINYINT |
short |
Byte | SMALLINT |
integer |
Integer | INTEGER |
long |
Long | BIGINT |
float |
Float | REAL |
half_float |
Float | FLOAT |
scaled_float |
Float | DOUBLE |
double |
Double | DOUBLE |
keyword |
String | VARCHAR |
text |
Text | VARCHAR |
date |
Timestamp | TIMESTAMP |
date_nanos |
Timestamp | TIMESTAMP |
ip |
IP | VARCHAR |
binary |
Binary | VARBINARY |
object |
Struct | STRUCT |
nested |
Array | STRUCT |
이 목록 외에도 SQL 플러그인은 datetime 타입을 지원하지만, OpenSearch나 SQL과의 대응 매핑은 없어요. 대응 매핑이 없는 함수를 사용하려면 매핑이 있는 타입으로 데이터 타입을 명시적으로 변환해야 해요.
날짜 및 시간 타입(DATE and time types)
날짜 및 시간 타입은 시간 구간을 나타내요: DATE, TIME, DATETIME, TIMESTAMP, INTERVAL. 기본적으로 OpenSearch DSL은 절대 시점의 모든 정보를 포함하는 날짜-시간 관련 타입으로 date 타입만 사용해요.
SQL과 통합하기 위해 timestamp 타입을 제외한 각 타입은 시간 구간 정보의 일부를 보유해요. 날짜-시간 함수를 사용하려면 날짜 및 시간(Date and time)을 참조해요. 일부 함수는 입력 인자 타입에 제한이 있을 수 있어요.
Date
date 타입은 시간대와 무관하게 달력 날짜를 나타내요. 주어진 날짜 값은 24시간 구간이지만, 이 구간은 다른 시간대에서 달라지고 일광 절약 시간제 중에는 유연한 시간을 가질 수 있어요. date 타입은 시간 정보를 포함하지 않으며 1000-01-01부터 9999-12-31 범위만 지원해요.
| Type | Syntax | Range |
|---|---|---|
date |
yyyy-MM-dd |
0001-01-01 to 9999-12-31 |
Time
time 타입은 시간대와 무관하게 시계의 시각을 나타내요. time 타입은 날짜 정보를 포함하지 않아요.
| Type | Syntax | Range |
|---|---|---|
time |
hh:mm:ss[.fraction] |
00:00:00.0000000000 to 23:59:59.9999999999 |
Date and time
datetime 타입은 날짜와 시간의 결합이에요. 시간대 정보를 포함하지 않아요. 날짜, 시간, 시간대 정보를 모두 포함하는 절대 시점은 Timestamp를 참조해요.
| Type | Syntax | Range |
|---|---|---|
datetime |
yyyy-MM-dd hh:mm:ss[.fraction] |
0001-01-01 00:00:00.0000000000 to 9999-12-31 23:59:59.9999999999 |
Timestamp
timestamp 타입은 시간대나 관례와 무관한 절대 인스턴스예요. 예를 들어 주어진 시점에 타임스탬프를 다른 시간대로 변경하면 값도 그에 따라 달라져요.
timestamp 타입은 다른 타입과 다르게 저장돼요. 현재 시간대에서 UTC로 변환되어 저장되고, 검색 시 UTC에서 설정된 시간대로 다시 변환돼요.
| Type | Syntax | Range |
|---|---|---|
timestamp |
yyyy-MM-dd hh:mm:ss[.fraction] |
0001-01-01 00:00:01.9999999999 UTC to 9999-12-31 23:59:59.9999999999 |
Interval
interval 타입은 시간적 지속 기간이나 구간을 나타내요.
| Type | Syntax |
|---|---|
interval |
INTERVAL expr unit |
expr은 결국 수량 값으로 환산되는 임의의 표현식이에요. MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR를 포함해 수량을 해석하는 단위를 나타내요. INTERVAL 키워드와 단위 지정자는 대소문자를 구분하지 않아요.
interval 타입에는 두 가지 클래스의 간격이 있어요: year-week 간격과 day-time 간격.
- Year-week 간격은 연, 분기, 월, 주를 저장해요.
- Day-time 간격은 일, 시, 분, 초, 마이크로초를 저장해요.
날짜 및 시간 타입 간 변환(Convert between date and time types)
interval 타입을 제외한 모든 날짜 및 시간 타입은 서로 변환할 수 있어요. 변환은 값을 변경하거나 일부 정보 손실을 일으킬 수 있어요. 예를 들어 datetime 값에서 time 값을 추출하거나, date 값을 datetime 값으로 변환하는 경우 등이에요.
SQL 플러그인은 각 타입에 대해 다음과 같은 변환 규칙을 지원해요.
date에서 변환
date값은 시간 정보가 없으므로time타입으로의 변환은 유용하지 않고 항상00:00:00의 영(零) 시간 값을 반환해요.date에서datetime으로 변환하면 시간 정보가 없어 데이터가 채워져요. 기본적으로 원래 날짜에00:00:00시간을 붙여datetime인스턴스를 형성해요. 예를 들어2020-08-17을datetime타입으로 변환하면2020-08-17 00:00:00이에요.timestamp타입으로 변환하면time값과 시간대 정보가 모두 대체돼요. 날짜에 영 시간 값00:00:00과 세션 시간대(기본 UTC)를 붙여요. 예를 들어2020-08-17을 세션 시간대 UTC로datetime타입으로 변환하면2020-08-17 00:00:00 UTC예요.
time에서 변환
time타입은 날짜 정보를 포함하지 않으므로 다른 날짜 및 시간 타입으로 변환할 수 없어요.
datetime에서 변환
datetime에서date로 변환하면datetime값에서 날짜 값을 추출해요. 예를 들어2020-08-17 14:09:00을date타입으로 변환하면2020-08-08이에요.datetime에서time으로 변환하면datetime값에서 시간 값을 추출해요. 예를 들어2020-08-17 14:09:00을time타입으로 변환하면14:09:00이에요.datetime타입은 시간대 정보를 포함하지 않으므로timestamp타입으로 변환할 때 세션 시간대로 시간대 값을 채워요. 예를 들어2020-08-17 14:09:00(UTC)을timestamp타입으로 변환하면2020-08-17 14:09:00 UTC예요.
timestamp에서 변환
timestamp타입에서date타입으로 변환하면 날짜 값을 추출하고,time타입으로 변환하면 시간 값을 추출해요.timestamp타입에서datetime타입으로 변환하면datetime값만 추출하고 시간대 값은 제외해요. 예를 들어2020-08-17 14:09:00UTC를date타입으로 변환하면2020-08-17,time타입으로 변환하면14:09:00,datetime타입으로 변환하면2020-08-17 14:09:00이에요.