Flink基礎(三十六):FLINK-SQL函數(1) 函數(一)概述


0 函數

Flink 允許用戶在 Table API 和 SQL 中使用函數進行數據的轉換。

1 函數類型

Flink 中的函數有兩個划分標准。

一個划分標准是:系統(內置)函數和 Catalog 函數。系統函數沒有名稱空間,只能通過其名稱來進行引用。 Catalog 函數屬於 Catalog 和數據庫,因此它們擁有 Catalog 和數據庫命名空間。 用戶可以通過全/部分限定名(catalog.db.func 或 db.func)或者函數名 來對 Catalog 函數進行引用。

另一個划分標准是:臨時函數和持久化函數。 臨時函數始終由用戶創建,它容易改變並且僅在會話的生命周期內有效。 持久化函數不是由系統提供,就是存儲在 Catalog 中,它在會話的整個生命周期內都有效。

這兩個划分標准給 Flink 用戶提供了 4 種函數:

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

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

2 函數引用

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

2.1  精確函數引用

精確函數引用允許用戶跨 Catalog,跨數據庫調用 Catalog 函數。 例如:select mycatalog.mydb.myfunc(x) from mytable 和 select 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 和當前數據庫中


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM