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:00 UTC를 date 타입으로 변환하면 2020-08-17, time 타입으로 변환하면 14:09:00, datetime 타입으로 변환하면 2020-08-17 14:09:00이에요.

더 알아보기 (Learn more)