news 2026/2/25 5:59:21

Flink SQL 的 USE / USE CATALOG / USE MODULES(Catalog、Database、Module 三件套)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flink SQL 的 USE / USE CATALOG / USE MODULES(Catalog、Database、Module 三件套)

1、USE CATALOG:切换当前 Catalog

USECATALOG cat1;

含义:把“当前 catalog”设置为cat1
之后你写:

SHOWDATABASES;CREATETABLEt1(...);

如果没有显式写catalog.db.table的全限定名,Flink 会默认把对象解析到cat1这个 catalog 里。

默认值default_catalog
不存在会怎样:直接抛异常(这点非常重要,很多人以为会自动创建)。

2、USE:切换当前 Database(可带 catalog 前缀)

USEdb1;

含义:把当前 database 设置成db1
之后你写CREATE TABLE Orders (...),它会落在:
当前catalog.db1.Orders

也可以写全一点:

USEcat1.db1;

这相当于一次性把 catalog + database 都切到目标位置(具体支持程度以你环境对 catalog/database 的实现为准,但语义就是“按前缀解析”)。

默认 databasedefault_database
db 不存在:抛异常。

3、USE MODULES:切换“函数/类型/规则”的解析顺序(非常实用,也非常容易忽略)

USEMODULES hive;

这句不是切 catalog/db,而是控制“元数据解析优先级”。它影响的典型对象包括:

  • 内置/扩展函数(比如 hive 内置函数)
  • 用户自定义类型(UDT)
  • 规则、元数据解析(文档里统称 metadata)
3.1 什么是解析顺序?

当你执行:

SELECTmy_func(x)FROMt;

Flink 会按USE MODULES声明的顺序去查找my_func到底来自哪个模块。
如果你启用了多个模块,还能指定优先级:

USEMODULES hive,core;

意思就是:优先在 hive 模块里找,找不到再去 core 里找。

3.2 “loaded” 与 “used”的区别(核心坑点)

文档含义是:

  • 模块被load后,默认是used=true(可用)
  • 但一旦你执行USE MODULES ...只有出现在列表里的模块会保持 used
    没出现在列表里的,即使已经 loaded,也会变成disabled(used=false)

所以你会看到类似:

SHOWFULLMODULES;-- hive true-- core false

这就是为什么“我之前还能用的函数突然找不到了”的典型原因之一:你换了模块启用列表。

4、Java 里怎么用?(executeSql 返回 OK 的那种)

在 Java(TableEnvironment / StreamTableEnvironment)里,你直接:

tEnv.executeSql("USE CATALOG cat1");tEnv.executeSql("USE db1");tEnv.executeSql("USE MODULES hive");

成功会返回OK(或者对应的 TableResult 可打印),失败则抛异常。
建议你在平台化/脚本执行场景里,把每一次USE都当成“可能失败的边界”,明确 catch 并记录上下文(当前 catalog/db/modules)。

5、一套推荐的“工程化用法”(避免环境漂移)

如果你在写作业/平台,强烈建议遵循这三条:

  1. 任何 DDL/DML 执行前,显式 USE CATALOG + USE db
    避免默认的default_catalog.default_database导致表建错位置。

  2. 模块切换要谨慎USE MODULES hive会导致 core 被禁用(不在列表里)
    如果你依赖 core 的函数或规则,记得把它放进列表里:

    USEMODULES hive,core;
  3. 对外提供 SQL 执行能力时:建议每个会话隔离上下文
    因为USE改的是“会话级的当前上下文”,很容易造成串环境问题。

6、总结

  • USE CATALOG xxx:切换当前 catalog(默认default_catalog
  • USE dbUSE catalog.db:切换当前数据库(默认default_database
  • USE MODULES ...:控制函数/类型/规则等元数据解析来源与优先级(默认模块core
  • 三者组合决定:你不写全限定名时,SQL 到底解析到哪里、函数到底用哪个实现
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/21 18:24:57

优思学院|精益生产的十大工具——精益生产的设计蓝图

摘要 精益生产并不是一套“做得更忙”的管理口号,而是一种围绕价值流动而设计的组织能力。它以消除浪费、缩短交付周期、稳定质量与提升柔性为核心目标,强调通过可视化、标准化与全员参与,把问题从“被动救火”转为“主动预防”。本文以优思…

作者头像 李华
网站建设 2026/2/23 17:19:20

为什么99%的工业Agent项目失败?数据预处理被严重低估的4大陷阱

第一章:工业互联网Agent的数据分析 在工业互联网架构中,Agent作为部署于边缘设备或终端系统中的数据采集与处理单元,承担着实时监控、数据预处理和智能决策支持的关键职责。通过在设备侧嵌入轻量级数据分析能力,Agent能够有效降低…

作者头像 李华
网站建设 2026/2/17 9:44:06

关于2025年银行业保险业信息科技非现场监管报表报送工作的通知 金科通〔2024〕162号

金融监管总局科技监管司关于2025年银行业保险业信息科技非现场监管报表报送工作的通知 金科通〔2024〕162号 各金融监管局,各政策性银行、大型银行、股份制银行、外资银行、直销银行、金融资产管理公司、理财公司,各保险集团(控股)公司、保险公司、保险资产管理公司:

作者头像 李华
网站建设 2026/2/17 16:10:30

接到紧急项目?XinServer 帮我稳住了现场

接到紧急项目?XinServer 帮我稳住了现场 上周三下午,我正喝着咖啡摸鱼,老板一个电话打过来:“老王,有个紧急的客户项目,两周后要演示,后台管理系统得搞定,你带人顶一下?”…

作者头像 李华
网站建设 2026/2/19 9:08:54

9、数据工作流管理与探索指南

数据工作流管理与探索指南 1. 数据工作流管理 1.1 工作流基础 在数据处理中,有时一个步骤可能会花费很长时间,或者你希望继续使用相同的数据,又或者数据来自有速率限制的 API。这时,让一个步骤将数据保存到文件,后续步骤对该文件进行操作是个不错的选择,这样可以避免冗…

作者头像 李华
网站建设 2026/2/17 16:40:57

12、分布式处理与数据建模实战

分布式处理与数据建模实战 1. 分布式处理基础 在分布式处理中,我们可以通过不同方式利用远程机器来完成任务,主要包括在远程机器上运行普通命令、直接在远程机器间分发本地数据以及将文件发送到远程机器进行处理并取回结果。 1.1 获取运行中的 AWS EC2 实例列表 若使用 A…

作者头像 李华