Mathpix:从公式识别到文档智能,AI如何重塑科研工作流
2026/7/14 11:51:11
一句话:
UNLOAD MODULE xxx会把模块从当前会话的“已加载模块集合”中移除。
它适用于:
示例(你给的原文):
StreamExecutionEnvironmentenv=StreamExecutionEnvironment.getExecutionEnvironment();StreamTableEnvironmenttEnv=StreamTableEnvironment.create(env);// 卸载 core 模块tEnv.executeSql("UNLOAD MODULE core");tEnv.executeSql("SHOW MODULES").print();// Empty set这里特别关键的现象是:
卸载core后,SHOW MODULES直接变成Empty set。
这说明:
core并不是“永远存在不可动”的东西(在当前会话里它也属于可卸载模块)UNLOAD MODULE module_name没有 WITH 参数,纯卸载。
这是最容易混淆的一点:
一个更直观的理解:
USE 更像“开关和优先级”;UNLOAD 更像“卸载插件”。
所以你在排查模块相关问题时,建议流程是:
1)先看全量状态
SHOWFULLMODULES;2)如果只是想切换优先级/启用与否
USEMODULES hive,core;3)如果你要彻底移除某个模块(避免后续任何解析命中它)
UNLOAD MODULE hive;如果你做的是类似 SQL Gateway 的能力,用户可能在同一 session 里:
这很容易造成“前一个用户/前一次执行”对“后一次执行”产生影响。
此时常见做法是:
当你怀疑某个函数在不同模块里同名实现导致行为差异,可以:
你给的例子直接卸载了core,这在生产里要非常谨慎。因为core通常是默认模块,包含大量基础能力。
如果你看到:
SHOW MODULES变成 Empty set优先怀疑:
LOAD MODULE core(如果允许)并USE MODULES core恢复UNLOAD MODULE xxx:卸载模块(从当前会话 loaded 集合中移除)
Java 中用executeSql()执行,成功返回OK,失败抛异常
与USE MODULES的区别:
生产建议:
core