Flink SQL「SHOW / SHOW CREATE」元数据巡检、DDL 复刻与排障速查(含 Java 示例)

1. SHOW 与 SHOW CREATE 的定位

1.1 SHOW:列出"某个父级下的对象"

SHOW 用于列出其对应父对象下的对象清单,例如:

  • catalogs、databases
  • tables、views、materialized tables
  • columns、functions、modules
  • partitions、procedures
  • (CLI/Gateway 侧)jars、jobs
  • models

1.2 SHOW CREATE:打印"可复刻的 DDL"

SHOW CREATE 用来打印创建某个对象的 DDL,目前(在你给的内容里):

  • SHOW CREATE 可用于 table 和 view
  • 同时文档还给出了 SHOW CREATE MODEL(模型 DDL 打印),用于复刻模型

额外注意:SHOW CREATE TABLE 当前仅支持 Flink SQL DDL 创建的表

  • SHOW CATALOGS
  • SHOW CURRENT CATALOG
  • SHOW CREATE CATALOG
  • SHOW DATABASES
  • SHOW CURRENT DATABASE
  • SHOW TABLES
  • SHOW CREATE TABLE
  • SHOW COLUMNS
  • SHOW PARTITIONS
  • SHOW PROCEDURES
  • SHOW VIEWS
  • SHOW CREATE VIEW
  • SHOW MATERIALIZED TABLES
  • SHOW CREATE MATERIALIZED TABLE
  • SHOW FUNCTIONS
  • SHOW MODULES
  • SHOW JARS
  • SHOW JOBS
  • SHOW MODELS

3. Java 里怎么执行 SHOW?(TableEnvironment.executeSql)

在 Java 中,SHOW 语句通过 TableEnvironment.executeSql() 执行:

  • 成功:返回可打印的结果对象(TableResult
  • 失败:抛异常

示例(与你提供的内容一致,略去 connector 细节):

java 复制代码
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
StreamTableEnvironment tEnv = StreamTableEnvironment.create(env);

// show catalogs
tEnv.executeSql("SHOW CATALOGS").print();

// show current catalog
tEnv.executeSql("SHOW CURRENT CATALOG").print();

// create a catalog
tEnv.executeSql("CREATE CATALOG cat2 WITH (...)");

// show create catalog
tEnv.executeSql("SHOW CREATE CATALOG cat2").print();

// show databases
tEnv.executeSql("SHOW DATABASES").print();

// show current database
tEnv.executeSql("SHOW CURRENT DATABASE").print();

// create a table
tEnv.executeSql("CREATE TABLE my_table (...) WITH (...)");

// show tables
tEnv.executeSql("SHOW TABLES").print();

// show create table
tEnv.executeSql("SHOW CREATE TABLE my_table").print();

// show columns with LIKE filter
tEnv.executeSql("SHOW COLUMNS FROM my_table LIKE '%f%'").print();

// create a view
tEnv.executeSql("CREATE VIEW my_view AS SELECT * FROM my_table");

// show views
tEnv.executeSql("SHOW VIEWS").print();

// show create view
tEnv.executeSql("SHOW CREATE VIEW my_view").print();

// show functions
tEnv.executeSql("SHOW FUNCTIONS").print();

// show user functions
tEnv.executeSql("SHOW USER FUNCTIONS").print();

// show modules
tEnv.executeSql("SHOW MODULES").print();

// show full modules
tEnv.executeSql("SHOW FULL MODULES").print();

4. Catalog / Database:先找"你在哪里",再找"你有什么"

4.1 SHOW CATALOGS:列出所有 catalog(支持 LIKE/ILIKE/NOT)

sql 复制代码
SHOW CATALOGS [ [NOT] (LIKE | ILIKE) <sql_like_pattern> ]
  • LIKE:大小写敏感

  • ILIKE:大小写不敏感

  • pattern 规则沿用 MySQL:

    • % 任意长度(可为 0)
    • _ 单字符
    • \%\_ 表示字面量

例子:

sql 复制代码
SHOW CATALOGS;
SHOW CATALOGS LIKE '%log1';
SHOW CATALOGS ILIKE '%LOG1';

4.2 SHOW CURRENT CATALOG:当前 catalog 是谁?

sql 复制代码
SHOW CURRENT CATALOG;

4.3 SHOW CREATE CATALOG:打印 catalog 的创建语句

sql 复制代码
SHOW CREATE CATALOG catalog_name;

输出包含 catalog 名称与属性配置,适合做"环境对照/复刻"。

4.4 SHOW DATABASES:列出某个 catalog 下的库(可选)

sql 复制代码
SHOW DATABASES [ (FROM | IN) catalog_name ] [ [NOT] (LIKE | ILIKE) <pattern> ]

4.5 SHOW CURRENT DATABASE:当前 database 是谁?

sql 复制代码
SHOW CURRENT DATABASE;

5. Table / View:列清单 + 复刻 DDL(最常用)

5.1 SHOW TABLES:列出表(可指定库,可 LIKE/NOT LIKE)

sql 复制代码
SHOW TABLES [ (FROM | IN) [catalog_name.]database_name ] [ [NOT] LIKE <pattern> ]

例子(官方示例风格):

sql 复制代码
SHOW TABLES FROM db1;
SHOW TABLES FROM catalog1.db1;
SHOW TABLES FROM db1 LIKE '%n';
SHOW TABLES FROM db1 NOT LIKE '%n';
SHOW TABLES;

5.2 SHOW CREATE TABLE:一键打印建表 DDL

sql 复制代码
SHOW CREATE TABLE [[catalog_name.]db_name.]table_name;

输出包含:

  • 表名(通常是全限定名)
  • 字段名、类型
  • 约束(如 PK NOT ENFORCED)
  • 注释
  • watermark、计算列等
  • WITH 配置(connector/options)

注意:当前只支持 Flink SQL DDL 创建的表。

5.3 SHOW VIEWS / SHOW CREATE VIEW:视图同理

sql 复制代码
SHOW VIEWS [ (FROM | IN) [catalog_name.]database_name ] [ [NOT] LIKE <pattern> ];
SHOW CREATE VIEW [catalog_name.][db_name.]view_name;

6. 列、分区与过程:排障时"特别顶用"的三件套

6.1 SHOW COLUMNS:列结构速查(支持 LIKE/NOT LIKE)

sql 复制代码
SHOW COLUMNS (FROM | IN) [[catalog_name.]database.]table_name [ [NOT] LIKE <pattern> ];

典型用途:

  • 快速确认字段名、类型、是否可为空
  • 判断是否存在 watermark / proctime / computed column
  • 排查"写入字段不匹配""字段名拼错""类型不兼容"等问题

6.2 SHOW PARTITIONS:分区表排查神器

sql 复制代码
SHOW PARTITIONS [[catalog_name.]database.]table_name [PARTITION (k1=v1, k2=v2, ...)];

典型用途:

  • "我明明写了数据,为什么查不到?"------先看分区是否写进了你预期的分区
  • "我过滤条件生效了吗?"------对照分区列表比猜更靠谱

6.3 SHOW PROCEDURES:列出过程(可过滤)

sql 复制代码
SHOW PROCEDURES [ (FROM | IN) [catalog_name.]database_name ] [ [NOT] (LIKE | ILIKE) <pattern> ];

7. Functions / Modules:函数找不到、解析怪?先看它俩

7.1 SHOW FUNCTIONS(系统函数 + UDF),SHOW USER FUNCTIONS(仅 UDF)

sql 复制代码
SHOW [USER] FUNCTIONS [ (FROM | IN) [catalog_name.]database_name ] [ [NOT] (LIKE | ILIKE) <pattern> ];

7.2 SHOW MODULES / SHOW FULL MODULES:看模块启用状态与解析顺序

sql 复制代码
SHOW [FULL] MODULES;
  • SHOW MODULES:仅显示"启用的模块"和解析顺序
  • SHOW FULL MODULES:显示"已加载模块 + used(true/false) 状态 + 解析顺序"

很多"同名函数冲突/突然不可用"的根因,就是模块启用状态或解析顺序变化。

8. SQL CLI / SQL Gateway 限定:SHOW JARS、SHOW JOBS

sql 复制代码
SHOW JARS;
SHOW JOBS;

注意(官方强调):

  • 目前 SHOW JARS / SHOW JOBS 只在 SQL CLI 或 SQL Gateway 生效
  • 在纯 Java TableEnvironment 场景下不一定可用(取决于你接入方式)

9. 模型:SHOW MODELS 与 SHOW CREATE MODEL

sql 复制代码
SHOW MODELS [ (FROM | IN) [catalog_name.]database_name ] [ [NOT] (LIKE | ILIKE) <pattern> ];
SHOW CREATE MODEL [catalog_name.][db_name.]model_name;

SHOW CREATE MODEL 的输出包含:

  • model 名称
  • 输入/输出 schema
  • model options 与其它配置

适合:理解既有模型结构、跨库复刻模型。

10. 一套"拿来就用"的排障顺序(强烈推荐)

当你遇到:表找不到 / 函数解析不对 / DDL 不清楚 / 分区数据缺失------按这个顺序走:

1)确认上下文

sql 复制代码
SHOW CURRENT CATALOG;
SHOW CURRENT DATABASE;

2)确认对象是否存在

sql 复制代码
SHOW TABLES;
SHOW VIEWS;
SHOW FUNCTIONS;

3)对象太多就过滤

sql 复制代码
SHOW TABLES LIKE '%order%';
SHOW FUNCTIONS ILIKE '%sha%';

4)需要复刻/核对结构

sql 复制代码
SHOW CREATE TABLE xxx;
SHOW COLUMNS FROM xxx;

5)分区问题

sql 复制代码
SHOW PARTITIONS xxx;

6)函数冲突/不可用

sql 复制代码
SHOW FULL MODULES;

SHOW/SHOW CREATE 在 Flink SQL 里不只是"看一眼"的命令,而是一套完整的元数据自检与复刻工具链:写 SQL 前先确认上下文,出问题先 SHOW 再猜,迁移环境直接 SHOW CREATE 复制 DDL,效率会高一大截。

相关推荐
身如柳絮随风扬5 小时前
Java中的CAS机制详解
java·开发语言
风筝在晴天搁浅6 小时前
hot100 78.子集
java·算法
故事和你917 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
Configure-Handler8 小时前
buildroot System configuration
java·服务器·数据库
:Concerto8 小时前
JavaSE 注解
java·开发语言·sprint
电商API_180079052479 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
一点程序9 小时前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
C雨后彩虹9 小时前
计算疫情扩散时间
java·数据结构·算法·华为·面试
2601_949809599 小时前
flutter_for_openharmony家庭相册app实战+我的Tab实现
java·javascript·flutter
vx_BS813309 小时前
【直接可用源码免费送】计算机毕业设计精选项目03574基于Python的网上商城管理系统设计与实现:Java/PHP/Python/C#小程序、单片机、成品+文档源码支持定制
java·python·课程设计