[
https://issues.apache.org/jira/browse/FLINK-21045?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17277867#comment-17277867
]
Jane Chan edited comment on FLINK-21045 at 2/3/21, 10:18 AM:
-------------------------------------------------------------
Hi everyone,
I did a summary since the discussion has achieved a consensus. If there is
anything missed or not corrected, please let me know. For more information,
please reach to the [discussion
thread|http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-FLINK-21045-Support-load-module-and-unload-module-SQL-syntax-td48398.html].
This summary is backed up on the [google
doc|https://docs.google.com/document/d/111d9ZOdI0JDzTUlG7s2ki6_jygHkVctPjsjrNknwyCk/edit#heading=h.gsxtfw7wz6pl].
----
h2. API Change
h3. ModuleManager
We introduce two methods to support USE MODULES and SHOW FULL MODULES. Beyond
that, the behavior of methods listModules, listFunctions, and
getFunctionDefinition will return functions and definitions of used modules.
{code:java}
public class ModuleManager {
/**
* Get names and use status of all modules loaded.
*
* @return a list of pairs of name and status for all modules loaded.
*/
public List<Pair<String, Boolean>> listFullModules() {
// list all loaded modules with status
}
/**
* Enable modules with declared name order. Modules that have been loaded
but not on the
* name list will become unused but still loaded with relative order
unchanged.
*
* @param names module names to be used.
* @throws ValidationException when module names contain an unloaded name.
*/
public void useModules(List<String> names) {
// list all loaded modules with status
}
}
{code}
h3. ModuleFactory
ModuleFactory will use the module name to perform factory discovery. Besides,
there will be a long-term plan to migrate ModuleFactory to extends
org.apache.flink.table.factories.Factory. This plan is currently beyond the
scope of this improvement.
h2. SQL Syntax Change
h3. LOAD MODULE
Load a module with the given name and append it to the end of the module list.
|LOAD MODULE module_name WITH ('prop' = 'myProp', ...)|
Explanation
* WITH is necessary
* Module name x is a simple identifier instead of a string literal.
* Property key 'type' is deprecated and removed now, and factory discovery
will use the module name.
* Throws org.apache.flink.table.api.ValidationException if module_name exists.
* The newly loaded module will be implicitly used by default.
Example
{code:java}
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| core | true |
-------------------
Flink SQL> CREATE MODULE hive WITH ('hive-version' = '3.1.2');
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| core | true |
| hive | true |
-------------------
{code}
h3. UNLOAD MODULE
Unload a module by name from the module list, and other modules remain in the
same relative positions.
|UNLOAD MODULE module_name|
Explanation
* Throws org.apache.flink.table.api.ValidationException if module_name does
not exist.
Example
{code:java}
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| core | true |
| ml | false |
| hive | true |
-------------------
Flink SQL> UNLOAD MODULE ml;
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| core | true |
| hive | true |
-------------------
{code}
USE MODULES
Change resolution order for loaded modules and meanwhile enable them in use.
|USE MODULES x [,y, z, ...]|
Explanation
* This behavior will change the resolution priority for modules x [,y, z,...]
in the declared order, and meanwhile, enable them.
* The unmentioned modules will become 'inactive' but still loaded.
* Throws org.apache.flink.table.api.ValidationException once the declared
module list contains a not loaded module.
Example
{code:java}
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| core | true |
| ml | false |
| hive | false |
-------------------
Flink SQL> USE MODULE hive, ml;
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| hive | true |
| ml | true |
| core | false |
-------------------
Flink SQL> USE MODULES core, unexisted_some_module, ml;
[ERROR] Could not execute SQL statement [USE]. Reason:
org.apache.flink.table.api.ValidationException: A module with name
[unexisted_some_module] does not exist.
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| hive | true |
| ml | true |
| core | false |
-------------------
{code}
h3. SHOW [FULL] MODULES
Display the loaded module names in declared order.
|SHOW [FULL] MODULES|
Explanation
* If `FULL` is specified, all loaded modules and their status will be listed.
* If `FULL` is omitted, only used modules will be listed.
Example
{code:java}
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| core | true |
| ml | false |
| hive | false |
-------------------
Flink SQL> SHOW MODULES;
-------------------
| modules | used |
-------------------
| core | true |
-------------------
{code}
h2. YAML Change
“type” is deprecated and removed from the configuration.
{code:java}
modules:
- name: core
- name: hive
hive-version: 2.2.1
{code}
Best,
Jane
was (Author: qingyue):
Hi everyone,
I did a summary since the discussion has achieved a consensus. If there is
anything missed or not corrected, please let me know. For more information,
please reach to the [discussion
thread|http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-FLINK-21045-Support-load-module-and-unload-module-SQL-syntax-td48398.html].
----
h2. API Change
h3. ModuleManager
We introduce two methods to support USE MODULES and SHOW FULL MODULES. Beyond
that, the behavior of methods listModules, listFunctions, and
getFunctionDefinition will return functions and definitions of used modules.
{code:java}
public class ModuleManager {
/**
* Get names and use status of all modules loaded.
*
* @return a list of pairs of name and status for all modules loaded.
*/
public List<Pair<String, Boolean>> listFullModules() {
// list all loaded modules with status
}
/**
* Enable modules with declared name order. Modules that have been loaded
but not on the
* name list will become unused but still loaded with relative order
unchanged.
*
* @param names module names to be used.
* @throws ValidationException when module names contain an unloaded name.
*/
public void useModules(List<String> names) {
// list all loaded modules with status
}
}
{code}
h3. ModuleFactory
ModuleFactory will use the module name to perform factory discovery. Besides,
there will be a long-term plan to migrate ModuleFactory to extends
org.apache.flink.table.factories.Factory. This plan is currently beyond the
scope of this improvement.
h2. SQL Syntax Change
h3. LOAD MODULE
Load a module with the given name and append it to the end of the module list.
|LOAD MODULE module_name WITH ('prop' = 'myProp', ...)|
Explanation
* WITH is necessary
* Module name x is a simple identifier instead of a string literal.
* Property key 'type' is deprecated and removed now, and factory discovery
will use the module name.
* Throws org.apache.flink.table.api.ValidationException if module_name exists.
* The newly loaded module will be implicitly used by default.
Example
{code:java}
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| core | true |
-------------------
Flink SQL> CREATE MODULE hive WITH ('hive-version' = '3.1.2');
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| core | true |
| hive | true |
-------------------
{code}
h3. UNLOAD MODULE
Unload a module by name from the module list, and other modules remain in the
same relative positions.
|UNLOAD MODULE module_name|
Explanation
* Throws org.apache.flink.table.api.ValidationException if module_name does
not exist.
Example
{code:java}
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| core | true |
| ml | false |
| hive | true |
-------------------
Flink SQL> UNLOAD MODULE ml;
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| core | true |
| hive | true |
-------------------
{code}
USE MODULES
Change resolution order for loaded modules and meanwhile enable them in use.
|USE MODULES x [,y, z, ...]|
Explanation
* This behavior will change the resolution priority for modules x [,y, z,...]
in the declared order, and meanwhile, enable them.
* The unmentioned modules will become 'inactive' but still loaded.
* Throws org.apache.flink.table.api.ValidationException once the declared
module list contains a not loaded module.
Example
{code:java}
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| core | true |
| ml | false |
| hive | false |
-------------------
Flink SQL> USE MODULE hive, ml;
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| hive | true |
| ml | true |
| core | false |
-------------------
Flink SQL> USE MODULES core, unexisted_some_module, ml;
[ERROR] Could not execute SQL statement [USE]. Reason:
org.apache.flink.table.api.ValidationException: A module with name
[unexisted_some_module] does not exist.
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| hive | true |
| ml | true |
| core | false |
-------------------
{code}
h3. SHOW [FULL] MODULES
Display the loaded module names in declared order.
|SHOW [FULL] MODULES|
Explanation
* If `FULL` is specified, all loaded modules and their status will be listed.
* If `FULL` is omitted, only used modules will be listed.
Example
{code:java}
Flink SQL> SHOW FULL MODULES;
-------------------
| modules | used |
-------------------
| core | true |
| ml | false |
| hive | false |
-------------------
Flink SQL> SHOW MODULES;
-------------------
| modules | used |
-------------------
| core | true |
-------------------
{code}
h2. YAML Change
“type” is deprecated and removed from the configuration.
{code:java}
modules:
- name: core
- name: hive
hive-version: 2.2.1
{code}
Best,
Jane
> Support 'load module' and 'unload module' SQL syntax
> ----------------------------------------------------
>
> Key: FLINK-21045
> URL: https://issues.apache.org/jira/browse/FLINK-21045
> Project: Flink
> Issue Type: Improvement
> Components: Table SQL / Planner
> Affects Versions: 1.13.0
> Reporter: Nicholas Jiang
> Assignee: Jane Chan
> Priority: Major
> Fix For: 1.13.0
>
>
> At present, Flink SQL doesn't support the 'load module' and 'unload module'
> SQL syntax. It's necessary for uses in the situation that users load and
> unload user-defined module through table api or sql client.
> SQL syntax has been proposed in FLIP-68:
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-68%3A+Extend+Core+Table+System+with+Pluggable+Modules
--
This message was sent by Atlassian Jira
(v8.3.4#803005)