시스템

시스템 (내장) 함수 [System (Built-in) Functions]

Flink Table API & SQL은 데이터 변환을 위한 내장 함수 집합을 사용자에게 제공해요. 이 페이지는 그것들의 간단한 개요를 제공해요. 필요한 함수가 아직 지원되지 않는다면 사용자 정의 함수를 구현할 수 있어요. 함수가 충분히 일반적이라고 생각되면, 상세한 설명과 함께 Jira 이슈를 열어주세요.

출처: 문서

본문

스칼라 함수 (Scalar Functions)

스칼라 함수는 입력으로 0개, 1개 또는 그 이상의 값을 받고 결과로 단일 값을 반환해요.

비교 함수 (Comparison Functions)

SQL 함수 Table 함수 설명(Description)
value1 = value2 value1 === value2 value1과 value2가 같으면 TRUE를 반환하며, value1 또는 value2가 NULL이면 UNKNOWN을 반환해요.
value1 <> value2 value1 !== value2 value1과 value2가 같지 않으면 TRUE를 반환하며, value1 또는 value2가 NULL이면 UNKNOWN을 반환해요.
value1 > value2 value1 > value2 value1이 value2보다 크면 TRUE를 반환하며, value1 또는 value2가 NULL이면 UNKNOWN을 반환해요.
value1 >= value2 value1 >= value2 value1이 value2보다 크거나 같으면 TRUE를 반환하며, value1 또는 value2가 NULL이면 UNKNOWN을 반환해요.
value1 < value2 value1 < value2 value1이 value2보다 작으면 TRUE를 반환하며, value1 또는 value2가 NULL이면 UNKNOWN을 반환해요.
value1 <= value2 value1 <= value2 value1이 value2보다 작거나 같으면 TRUE를 반환하며, value1 또는 value2가 NULL이면 UNKNOWN을 반환해요.
value IS NULL value.isNull value가 NULL이면 TRUE를 반환해요.
value IS NOT NULL value.isNotNull value가 NULL이 아니면 TRUE를 반환해요.
value1 IS DISTINCT FROM value2 N/A 두 값이 다르면 TRUE를 반환해요. 여기서 NULL 값은 동일한 것으로 취급돼요. 예: 1 IS DISTINCT FROM NULL은 TRUE, NULL IS DISTINCT FROM NULL은 FALSE.
value1 IS NOT DISTINCT FROM value2 N/A 두 값이 같으면 TRUE를 반환해요. NULL 값은 동일한 것으로 취급돼요. 예: 1 IS NOT DISTINCT FROM NULL은 FALSE, NULL IS NOT DISTINCT FROM NULL은 TRUE.
value1 BETWEEN [ ASYMMETRIC | SYMMETRIC ] value2 AND value3 N/A 기본(또는 ASYMMETRIC 키워드)으로 value1이 value2보다 크거나 같고 value3보다 작거나 같으면 TRUE를 반환해요. SYMMETRIC 키워드로는 value1이 value2와 value3 사이에 포함되면 TRUE를 반환해요. value2나 value3이 NULL이면 FALSE 또는 UNKNOWN을 반환해요.
value1 NOT BETWEEN [ ASYMMETRIC | SYMMETRIC ] value2 AND value3 N/A 기본(또는 ASYMMETRIC 키워드)으로 value1이 value2보다 작거나 value3보다 크면 TRUE를 반환해요. SYMMETRIC 키워드로는 value1이 value2와 value3 사이에 포함되지 않으면 TRUE를 반환해요. value2나 value3이 NULL이면 TRUE 또는 UNKNOWN을 반환해요.
string1 LIKE string2 [ ESCAPE char ] string1.like(string2[, char]) string1이 패턴 string2와 일치하면 TRUE를 반환하며, string1 또는 string2가 NULL이면 UNKNOWN을 반환해요. 필요하다면 ESCAPE 절을 사용해 단일 문자로 구성된 이스케이프 문자를 정의할 수 있어요. 기본 이스케이프 문자는 없어요.
string1 NOT LIKE string2 [ ESCAPE char ] N/A string1이 패턴 string2와 일치하지 않으면 TRUE를 반환하며, string1 또는 string2가 NULL이면 UNKNOWN을 반환해요.
string1 SIMILAR TO string2 [ ESCAPE char ] string1.similar(string2) string1이 SQL 정규 표현식 string2와 일치하면 TRUE를 반환하며, string1 또는 string2가 NULL이면 UNKNOWN을 반환해요.
value1 IN (value2 [, value3]* ) value1.in(value2) value1이 주어진 목록(value2, value3, …)에 존재하면 TRUE를 반환해요. (value2, value3, …)에 NULL이 포함되면 요소를 찾으면 TRUE, 그렇지 않으면 UNKNOWN을 반환해요. value1이 NULL이면 항상 UNKNOWN을 반환해요.
EXISTS (sub-query) N/A 서브쿼리가 최소 하나의 행을 반환하면 TRUE를 반환해요. 연산이 조인과 그룹 연산으로 재작성될 수 있는 경우에만 지원돼요.

이 밖에도 논리 함수, 산술 함수, 문자열 함수, 시간 함수, 컬렉션 함수, 조건부 함수 등 다양한 스칼라 함수가 있어요. 예를 들어 UPPER, LOWER, TRIM, ABS, MOD, CONCAT, SUBSTRING, CURRENT_TIMESTAMP, YEAR 등이 있어요. 전체 목록은 Scalar Functions 섹션을 참고하세요.

보조 함수 (Auxiliary Functions)

SQL 함수 Table 함수 설명(Description)
N/A callSql(STRING) SQL 표현식 호출. 주어진 문자열은 플래닝 중 파싱되어 Table API 표현식으로 번역돼요. 런타임 중 평가되는 것은 번역된 표현식뿐이에요. 현재 호출은 간단한 스칼라 표현식으로 제한돼요. 집계 또는 테이블 값 함수 호출은 지원되지 않아요. 서브쿼리도 허용되지 않아요.
N/A ANY.as(NAME1, NAME2, ...) ANY(필드)에 이름을 지정해요. 표현식이 여러 필드로 확장되면 추가 이름이 지정될 수 있어요.

집계 함수 (Aggregate Functions)

집계 함수는 모든 행에 걸친 표현식을 입력으로 받고 결과로 단일 집계 값을 반환해요.

SQL 함수 Table 함수 설명(Description)
COUNT([ ALL ] expression | DISTINCT expression1 [, expression2]*) N/A 기본 또는 ALL로, expression이 NULL이 아닌 입력 행의 수를 반환해요. DISTINCT는 각 값의 고유 인스턴스 하나에 사용돼요.
COUNT(*) COUNT(1) FIELD.count 입력 행 수를 반환해요.
AVG([ ALL | DISTINCT ] expression) FIELD.avg 기본 또는 ALL 키워드로, 모든 입력 행에 걸친 expression의 평균(산술 평균)을 반환해요. DISTINCT는 각 값의 고유 인스턴스 하나에 사용돼요.
SUM([ ALL | DISTINCT ] expression) FIELD.sum 기본 또는 ALL 키워드로, 모든 입력 행에 걸친 expression의 합을 반환해요. DISTINCT는 고유 인스턴스에 사용돼요.
MAX([ ALL | DISTINCT ] expression) FIELD.max 기본 또는 ALL 키워드로, 모든 입력 행에 걸친 expression의 최댓값을 반환해요. DISTINCT는 고유 인스턴스에 사용돼요.
MIN([ ALL | DISTINCT ] expression ) FIELD.min 기본 또는 ALL 키워드로, 모든 입력 행에 걸친 expression의 최솟값을 반환해요. DISTINCT는 고유 인스턴스에 사용돼요.
STDDEV_POP / STDDEV_SAMP FIELD.stddevPop / FIELD.stddevSamp 모집단/표본 표준 편차를 반환해요.
VAR_POP / VAR_SAMP FIELD.varPop / FIELD.varSamp 모집단/표본 분산을 반환해요.
COLLECT([ ALL | DISTINCT ] expression) FIELD.collect 모든 입력 행에 걸친 expression의 multiset을 반환해요. NULL 값은 무시돼요.
RANK() / DENSE_RANK() N/A 값 그룹에서 값의 순위를 반환해요. RANK는 시퀀스에 공백을 만들고, DENSE_RANK는 공백을 만들지 않아요.
ROW_NUMBER() N/A 윈도우 파티션 내 행 순서에 따라 1부터 시작해 각 행에 고유한 순차 번호를 할당해요.
LEAD(expression [, offset] [, default]) / LAG(...) lead(...) / lag(...) 창에서 현재 행의 offset번째 앞/뒤 행의 값을 반환해요.
FIRST_VALUE / LAST_VALUE FIELD.firstValue / FIELD.lastValue 정렬된 값 집합 중 첫/마지막 값을 반환해요.
LISTAGG(expression [, separator]) FIELD.listagg 문자열 표현식의 값을 연결하고 사이에 구분자 값을 넣어요. 기본 구분자는 ','예요.
CUME_DIST() / PERCENT_RANK() N/A 값 그룹 내 값의 누적 분포/백분위 순위를 반환해요.
NTILE(n) N/A 각 윈도우 파티션의 행을 n개의 버킷으로 나눠요.
ARRAY_AGG FIELD.arrayAgg 입력 행을 연결해 배열을 반환해요.
PERCENTILE(expr, percentage[, frequency]) expr.percentile(percentage[, frequency]) 연속 분포를 사용해 지정된 백분율에서 expr의 백분위수 값을 반환해요.

비트맵 집계 함수 (Bitmap Aggregate Functions)

성능 팁:

  • MiniBatch 집계를 활성화하거나 윈도우 집계 안에서 비트맵 집계 함수를 사용해 상태 접근 오버헤드를 최적화하고 성능을 크게 개선하는 것을 강력히 권장해요.
  • 비트맵 집계 함수는 append-only 입력에서 가장 잘 동작해요. retraction 입력에서는 성능이 눈에 띄게 저하되므로, 가능하면 BITMAP 컬럼에 대해 다중 레벨 GROUP BY 집계를 피해요.
  • 중간 비트맵이 필요 없는 카디널리티 전용 시나리오에서는 BITMAP_XX_CARDINALITY_AGG()BITMAP_CARDINALITY(BITMAP_XX_AGG())보다 선호돼요. 기능적으로 동일하지만, 전자가 중간 비트맵 실체화를 피하고 더 잘 동작해요.
SQL 함수 Table 함수 설명(Description)
BITMAP_AND_AGG(bitmap) bitmap.bitmapAndAgg() 여러 비트맵의 AND(교집합)를 집계해요.
BITMAP_AND_CARDINALITY_AGG(bitmap) bitmap.bitmapAndCardinalityAgg() 여러 비트맵의 AND(교집합)를 집계하고 64비트 카디널리티를 반환해요.
BITMAP_BUILD_AGG(value) value.bitmapBuildAgg() 32비트 정수를 비트맵으로 집계해요.
BITMAP_OR_AGG(bitmap) bitmap.bitmapOrAgg() 여러 비트맵의 OR(합집합)를 집계해요.
BITMAP_XOR_AGG(bitmap) bitmap.bitmapXorAgg() 여러 비트맵의 XOR(대칭 차집합)를 집계해요.

시간 간격 및 시점 단위 지정자 (Time Interval and Point Unit Specifiers)

다음 표는 시간 간격과 시점 단위의 지정자를 나열해요.

Table API에서는 공백 대신 _를 사용해요(예: DAY_TO_HOUR). 복수형(Plural)은 SQL에서만 동작해요.

시간 간격 단위(Time Interval Unit) 시점 단위(Time Point Unit)
MILLENNIUM
CENTURY
DECADE
YEAR(S) YEAR
MONTH(S) MONTH
WEEK(S)
DAY(S) DAY
HOUR(S) HOUR
MINUTE(S) MINUTE
SECOND(S) SECOND
MILLISECOND(S) MILLISECOND
MICROSECOND(S) MICROSECOND
NANOSECOND(S) NANOSECOND

컬럼 함수 (Column Functions)

컬럼 함수는 SELECT 목록에서 비정규화된 컬럼을 나타내는 데 사용돼요.

SQL 함수 설명(Description)
DEFAULT SELECT 목록에서 DEFAULT를 정의해 컬럼의 기본값을 나타낼 수 있어요.
NULL SELECT 목록에서 NULL을 정의해 NULL 컬럼을 나타낼 수 있어요.

명명된 인자 (Named Arguments)

Flink SQL은 테이블 함수 호출 시 명명된 인자(named arguments)를 지원해요. 명명된 인자를 사용하면 함수의 공식 매개변수 이름을 사용해 값을 전달할 수 있어요.

call(f => COLOR, a => 1)
  • 공식 매개변수 f에 이름 COLOR, 매개변수 a에 값 1을 전달해요.
  • 명명된 인자와 위치 인자(positional arguments)를 혼합할 수 있어요. 단, 명명된 인자가 위치 인자 앞에 올 수 없어요.
  • 명명된 인자의 순서는 자유로워요.
  • 명명된 인자 이름은 대소문자를 구분하지 않아요.

더 알아보기 (Learn more)