1. 程式人生 > 實用技巧 >Flink基礎(三十六):FLINK SQL(十二) 函式(一)概述

Flink基礎(三十六):FLINK SQL(十二) 函式(一)概述

0 函式

Flink 允許使用者在 Table API 和 SQL 中使用函式進行資料的轉換。

1 函式型別

Flink 中的函式有兩個劃分標準。

一個劃分標準是:系統(內建)函式和 Catalog 函式。系統函式沒有名稱空間,只能通過其名稱來進行引用。 Catalog 函式屬於 Catalog 和資料庫,因此它們擁有 Catalog 和資料庫名稱空間。 使用者可以通過全/部分限定名(catalog.db.funcdb.func)或者函式名 來對 Catalog 函式進行引用。

另一個劃分標準是:臨時函式和持久化函式。 臨時函式始終由使用者建立,它容易改變並且僅在會話的生命週期內有效。 持久化函式不是由系統提供,就是儲存在 Catalog 中,它在會話的整個生命週期內都有效。

這兩個劃分標準給 Flink 使用者提供了 4 種函式:

  1. 臨時性系統函式
  2. 系統函式
  3. 臨時性 Catalog 函式
  4. Catalog 函式

請注意,系統函式始終優先於 Catalog 函式解析,臨時函式始終優先於持久化函式解析, 函式解析優先順序如下所述。

2 函式引用

使用者在 Flink 中可以通過精確、模糊兩種引用方式引用函式。

2.1 精確函式引用

精確函式引用允許使用者跨 Catalog,跨資料庫呼叫 Catalog 函式。 例如:select mycatalog.mydb.myfunc(x) from mytableselect mydb.myfunc(x) from mytable

僅 Flink 1.10 以上版本支援。

2.2 模糊函式引用

在模糊函式引用中,使用者只需在 SQL 查詢中指定函式名,例如:select myfunc(x) from mytable

3 函式解析順序

當函式名相同,函式型別不同時,函式解析順序才有意義。 例如:當有三個都名為 “myfunc” 的臨時性 Catalog 函式,Catalog 函式,和系統函式時, 如果沒有命名衝突,三個函式將會被解析為一個函式。

3.1 精確函式引用

由於系統函式沒有名稱空間,Flink 中的精確函式引用必須 指向臨時性 Catalog 函式或 Catalog 函式。

解析順序如下:

  1. 臨時性 catalog 函式
  2. Catalog 函式

3.2 模糊函式引用

解析順序如下:

  1. 臨時性系統函式
  2. 系統函式
  3. 臨時性 Catalog 函式, 在會話的當前 Catalog 和當前資料庫中
  4. Catalog 函式, 在會話的當前 Catalog 和當前資料庫中