Druid SQL 연산자
Druid SQL 연산자
Druid SQL에서 쓰는 산술·비교·논리 연산자들을 정리해요. 연산 결과 타입과 정밀도(precision) 관리에 주의할 부분도 함께 다뤄요.
출처: 문서
본문
Apache Druid는 Druid SQL과 native 쿼리 두 가지 쿼리 언어를 지원해요. 이 문서는 SQL 언어를 설명해요.
Druid SQL의 연산자는 일반적으로 하나 또는 두 개의 값을 받아 값에 기반한 결과를 반환해요. Druid SQL의 연산자 유형에는 산술, 비교, 논리 등이 있으며 여기서 설명해요.
수학 연산을 수행할 때 Druid는 double이나 float 값이 없는 한 64비트 정수(long) 데이터 타입을 사용해요. 연산에 float나 double 값을 사용하면 결과는 64비트 float인 double이 돼요. float와 double 값의 정밀도는 Java와 IEEE 표준에 의해 정의돼요.
정밀도 문제를 관리하는 데 도움이 되는 다음 지침을 기억해 두세요:
- Long 값은 부호에 사용되는 추가 비트 하나와 함께 최대 2^63까지 정확히 저장할 수 있어요.
- float 값은 32비트, double 값은 64비트를 사용해요. 두 타입 모두 부동 소수점 정밀도의 영향을 받아요. 정확한 10진수 값이 필요하면, 숫자를 10진수가 아닌 long 값(long 한도까지)으로 저장하는 것을 고려해요. 예를 들어 소수점 3자리가 필요하면 숫자에 1000을 곱해 저장하고, 쿼리할 때 1000으로 나눠 사용해요.
산술 연산자
| Operator | Description | | x + y | 더하기 | | x - y | 빼기 | | x * y | 곱하기 | | x / y | 나누기 |
날짜시간 산술 연산자
날짜시간 산술 연산자에서 interval_expr 는 INTERVAL '2' HOUR 같은 interval 리터럴을 포함할 수 있어요. 이 연산자는 하루를 일률적으로 86400초로 취급하며 일광 절약 시간(dst, daylight savings time)을 고려하지 않아요. 일광 절약 시간을 고려하려면 TIME_SHIFT 함수를 사용해요. 날짜시간 산술에 대해 TIMESTAMPADD 도 참고해요.
| Operator | Description | | timestamp_expr + interval_expr | 타임스탬프에 시간을 더해요. | | timestamp_expr - interval_expr | 타임스탬프에서 시간을 빼요. |
연결(Concatenation) 연산자
CONCAT 함수 도 참고해요.
| Operator | Description | | x || y | 문자열 x 와 y 를 연결해요. |
비교 연산자
| Operator | Description | | x = y | 같음 | | x IS NOT DISTINCT FROM y | NULL을 값으로 간주한 같음. 절대 NULL 을 반환하지 않아요. | | x <> y | 같지 않음 | | x IS DISTINCT FROM y | NULL을 값으로 간주한 같지 않음. 절대 NULL 을 반환하지 않아요. | | x > y | 큼 | | x >= y | 크거나 같음 | | x < y | 작음 | | x <= y | 작거나 같음 |
논리 연산자
| Operator | Description | | x AND y | 불리언 AND | | x OR y | 불리언 OR | | NOT x | 불리언 NOT | | x IS NULL | x 가 NULL이거나 빈 문자열이면 true | | x IS NOT NULL | x 가 NULL도 아니고 빈 문자열도 아니면 true | | x IS TRUE | x 가 true면 true | | x IS NOT TRUE | x 가 true가 아니면 true | | x IS FALSE | x 가 false면 true | | x IS NOT FALSE | x 가 false가 아니면 true | | x BETWEEN y AND z | x >= y AND x <= z 와 동일 | | x NOT BETWEEN y AND z | x < y OR x > z 와 동일 | | x LIKE pattern [ESCAPE esc] | x 가 SQL LIKE 패턴(선택적 escape 포함)과 일치하면 true | | x NOT LIKE pattern [ESCAPE esc] | x 가 SQL LIKE 패턴(선택적 escape 포함)과 일치하지 않으면 true | | x IN (values) | x 가 나열된 값 중 하나면 true | | x NOT IN (values) | x 가 나열된 값 중 하나가 아니면 true | | x IN (subquery) | x 가 서브쿼리에서 반환되면 true. 이 경우 join으로 변환돼요. 자세한 내용은 Query translation 문서를 참고해요. | | x NOT IN (subquery) | x 가 서브쿼리에서 반환되지 않으면 true. 이 경우 join으로 변환돼요. 자세한 내용은 Query translation 문서를 참고해요. |
기타 연산자
| Operator | Description | | PIVOT (aggregation_function(column_to_aggregate) FOR column_with_values_to_pivot IN (pivoted_column1 [, pivoted_column2 ...])) | 집계를 수행하고 결과에서 행을 열로 변환해요. | | UNPIVOT (values_column FOR names_column IN (unpivoted_column1 [, unpivoted_column2 ... ])) | 기존 열 값을 행으로 변환해요. |
더 알아보기 (Learn more)
- Druid SQL 개요 — SQL 기능 전반 살펴보기
- SQL 스칼라 함수 — 함수 참고 문서
- Query translation — SQL을 native 쿼리로 변환하는 방식