Flink Table API & SQL 함수

Flink Table API & SQL은 함수로 데이터 변환을 할 수 있게 해줘요. 함수를 분류하는 기준과 함수를 참조·해석하는 순서를 설명해요.

출처: Functions Overview

본문

Types of Functions

Flink에서 함수를 분류하는 데에는 두 가지 차원이 있어요.

하나는 시스템(내장) 함수 vs 카탈로그 함수예요. 시스템 함수는 네임스페이스가 없고 이름만으로 참조할 수 있어요. 카탈로그 함수는 카탈로그와 데이터베이스에 속하므로 카탈로그·데이터베이스 네임스페이스를 가지며, 전체/부분 한정 이름(catalog.db.func 또는 db.func)이나 함수 이름만으로 참조할 수 있어요.

다른 차원은 임시(temporary) 함수 vs 영구(persistent) 함수예요. 임시 함수는 휘발성이어서 세션의 수명 동안만 살아있고 항상 사용자가 생성해요. 영구 함수는 세션의 수명을 넘어 살아있으며 시스템이 제공하거나 카탈로그에 영속화돼요.

이 두 차원은 Flink 사용자에게 4가지 범주의 함수를 제공해요:

  1. 임시 시스템 함수 (Temporary system functions)
  2. 시스템 함수 (System functions)
  3. 임시 카탈로그 함수 (Temporary catalog functions)
  4. 카탈로그 함수 (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에서 정확한 함수 참조는 반드시 임시 카탈로그 함수 또는 카탈로그 함수를 가리켜야 해요.

해석 순서는 다음과 같아요:

  1. 임시 카탈로그 함수 (Temporary catalog function)
  2. 카탈로그 함수 (Catalog function)

Ambiguous Function Reference

해석 순서는 다음과 같아요:

  1. 임시 시스템 함수 (Temporary system function)
  2. 시스템 함수 (System function)
  3. 세션의 현재 카탈로그·현재 데이터베이스의 임시 카탈로그 함수 (Temporary catalog function)
  4. 세션의 현재 카탈로그·현재 데이터베이스의 카탈로그 함수 (Catalog function)

더 알아보기 (Learn more)