Wait the light to fall

函数

焉知非鱼

Functions

函数

Flink Table API & SQL 使用户能够通过函数进行数据转换。

函数的类型 #

Flink 中的函数有两个维度来分类。

一个维度是系统(或内置)函数 v.s. 目录函数。系统函数没有命名空间,可以只用名字来引用。目录函数属于目录和数据库,因此它们有目录和数据库的命名空间,它们可以用完全/部分限定名(catalog.db.funcdb.func)或者只用函数名来引用。

另一个维度是临时函数 v.s. 持久化函数。临时函数是不稳定的,只存在于一个会话的生命周期内,它们总是由用户创建的。而持久性函数则是在会话的生命周期内存在的,它们要么是由系统提供的,要么是在目录中持久存在的。

这两个维度给 Flink 用户提供了4类函数。

  1. 临时系统函数
  2. 系统函数
  3. 临时目录函数
  4. 目录函数

引用函数 #

在 Flink 中,用户有两种引用函数的方式 - 精确引用函数或模棱两可的引用函数。

精确的函数引用 #

精确的函数引用使用户能够专门使用目录函数,并且跨目录和跨数据库,例如从 mytable 中选择 mycatalog.mydb.myfunc(x),从 mytable 中选择 mydb.myfunc(x)

这只从 Flink 1.10 开始支持。

模棱两可的函数引用 #

在模棱两可的函数引用中,用户只需在 SQL 查询中指定函数名称即可,例如:select myfunc(x) from mytable

函数解析顺序 #

只有当有不同类型但名称相同的函数时,解析顺序才是重要的,比如有三个函数都名为 “myfunc”,但分别是临时目录、目录和系统函数。如果没有函数名冲突,则函数将被解析为唯一的一个。

精确的函数引用 #

因为系统函数没有命名空间,所以 Flink 中的精确函数引用必须指向临时目录函数或目录函数。

其解析顺序是:

  1. 临时目录函数
  2. 目录函数

含糊不清的函数参考 #

解析顺序是:

  1. 临时系统函数
  2. 系统函数
  3. 临时目录函数,在当前目录和当前数据库中的会话。
  4. 目录函数,在当前目录和当前数据库中的会话。

原文链接: https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/functions/