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,效率会高一大截。

相关推荐
yumgpkpm3 小时前
Cloudera CDP7、CDH5、CDH6 在华为鲲鹏 ARM 麒麟KylinOS做到无缝切换平缓迁移过程
大数据·arm开发·华为·flink·spark·kafka·cloudera
Doris_LMS3 小时前
接口、普通类和抽象类
java
重生之我是Java开发战士3 小时前
【数据结构】优先级队列(堆)
java·数据结构·算法
菜鸟233号3 小时前
力扣216 组合总和III java实现
java·数据结构·算法·leetcode
dodod20123 小时前
Ubuntu24.04.3执行sudo apt install yarnpkg 命令失败的原因
java·服务器·前端
Evan芙3 小时前
搭建 LNMT 架构并配置 Tomcat 日志管理与自动备份
java·架构·tomcat
青云交3 小时前
Java 大视界 -- Java+Spark 构建企业级用户画像平台:从数据采集到标签输出全流程(437)
java·开发语言·spark·hbase 优化·企业级用户画像·标签计算·高并发查询
航Hang*3 小时前
第3章:复习篇——第1节:创建和管理数据库
开发语言·数据库·笔记·sql·sqlserver
铉铉这波能秀3 小时前
正则表达式从入门到精通(字符串模式匹配)
java·数据库·python·sql·正则表达式·模式匹配·表格处理