模块
— 焉知非鱼Modules
模块测试版
模块允许用户扩展 Flink 的内置对象,比如定义一些行为类似 Flink 内置函数的功能。它们是可插拔的,虽然 Flink 提供了一些预建模块,但用户可以编写自己的模块。
例如,用户可以定义自己的地理函数,并将其作为内置函数插入 Flink,以便在 Flink SQL 和 Table API 中使用。又比如,用户可以加载一个现成的 Hive 模块,将 Hive 内置函数作为 Flink 内置函数使用。
模块类型 #
CoreModule #
CoreModule 包含了 Flink 的所有系统(内置)功能,并且默认被加载。
HiveModule #
HiveModule 作为 Flink 的系统函数,向 SQL 和 Table API 用户提供 Hive 内置函数。Flink 的 Hive 文档提供了设置该模块的全部细节。
用户定义模块 #
用户可以通过实现 Module 接口来开发自定义模块。为了在 SQL CLI 中使用自定义模块,用户应该通过实现 ModuleFactory 接口同时开发一个模块和它对应的模块工厂。
模块工厂定义了一组属性,用于在 SQL CLI 引导时配置模块。属性被传递给发现服务,服务会尝试将属性与模块工厂进行匹配,并实例化一个相应的模块实例。
命名空间和解析顺序 #
模块提供的对象被认为是 Flink 系统(内置)对象的一部分;因此,它们没有任何命名空间。
当有两个同名的对象存在于两个模块中时,Flink 总是将对象引用解析为第一个加载模块中的对象。
模块 API #
装载和卸载模块 #
用户可以在现有的 Flink 会话中加载和卸载模块。
- Scala
tableEnv.loadModule("myModule", new CustomModule());
tableEnv.unloadModule("myModule");
- YAML
所有使用 YAML 定义的模块都必须提供一个 type
属性来指定类型。以下类型是开箱即用的。
Catalog | Type Value |
---|---|
CoreModule | core |
HiveModule | hive |
modules:
- name: core
type: core
- name: myhive
type: hive
列出可用的模块 #
- Scala
tableEnv.listModules();
- SQL
Flink SQL> SHOW MODULES;
原文链接: https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/modules.html