Flink Table API & SQL 함수
Flink Table API & SQL 함수 (Functions) 개요
Flink Table API & SQL은 함수로 데이터 변환을 할 수 있게 해줘요. 함수를 분류하는 기준과 함수를 참조·해석하는 순서를 설명해요.
본문
Types of Functions
Flink에서 함수를 분류하는 데에는 두 가지 차원이 있어요.
하나는 시스템(내장) 함수 vs 카탈로그 함수예요. 시스템 함수는 네임스페이스가 없고 이름만으로 참조할 수 있어요. 카탈로그 함수는 카탈로그와 데이터베이스에 속하므로 카탈로그·데이터베이스 네임스페이스를 가지며, 전체/부분 한정 이름(catalog.db.func 또는 db.func)이나 함수 이름만으로 참조할 수 있어요.
다른 차원은 임시(temporary) 함수 vs 영구(persistent) 함수예요. 임시 함수는 휘발성이어서 세션의 수명 동안만 살아있고 항상 사용자가 생성해요. 영구 함수는 세션의 수명을 넘어 살아있으며 시스템이 제공하거나 카탈로그에 영속화돼요.
이 두 차원은 Flink 사용자에게 4가지 범주의 함수를 제공해요:
- 임시 시스템 함수 (Temporary system functions)
- 시스템 함수 (System functions)
- 임시 카탈로그 함수 (Temporary catalog functions)
- 카탈로그 함수 (Catalog functions)
Referencing Functions
사용자가 Flink에서 함수를 참조하는 방법은 두 가지예요 — 정확히 참조하거나 애매하게 참조하는 것.
Precise Function Reference
정확한 함수 참조는 사용자가 카탈로그 함수를 구체적으로, 그리고 카탈로그를 넘어 데이터베이스를 넘어 사용할 수 있게 해줘요. 예: select mycatalog.mydb.myfunc(x) from mytable, select mydb.myfunc(x) from mytable.
이는 Flink 1.10부터 지원돼요.
Ambiguous Function Reference
애매한 함수 참조에서는 사용자가 SQL 쿼리에 함수 이름만 지정해요. 예: select myfunc(x) from mytable.
Function Resolution Order
해석 순서는 서로 다른 유형이지만 같은 이름을 가진 함수가 있을 때만 중요해요. 예를 들어 이름이 모두 "myfunc"인 세 함수가 각각 임시 카탈로그, 카탈로그, 시스템 함수일 때가 그 경우예요. 함수 이름 충돌이 없으면 함수는 유일한 하나로만 해석돼요.
Precise Function Reference
시스템 함수는 네임스페이스가 없으므로 Flink에서 정확한 함수 참조는 반드시 임시 카탈로그 함수 또는 카탈로그 함수를 가리켜야 해요.
해석 순서는 다음과 같아요:
- 임시 카탈로그 함수 (Temporary catalog function)
- 카탈로그 함수 (Catalog function)
Ambiguous Function Reference
해석 순서는 다음과 같아요:
- 임시 시스템 함수 (Temporary system function)
- 시스템 함수 (System function)
- 세션의 현재 카탈로그·현재 데이터베이스의 임시 카탈로그 함수 (Temporary catalog function)
- 세션의 현재 카탈로그·현재 데이터베이스의 카탈로그 함수 (Catalog function)