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 创建的表。
2. Flink SQL 当前支持的 SHOW 清单(官方列表)
SHOW CATALOGSSHOW CURRENT CATALOGSHOW CREATE CATALOGSHOW DATABASESSHOW CURRENT DATABASESHOW TABLESSHOW CREATE TABLESHOW COLUMNSSHOW PARTITIONSSHOW PROCEDURESSHOW VIEWSSHOW CREATE VIEWSHOW MATERIALIZED TABLESSHOW CREATE MATERIALIZED TABLESHOW FUNCTIONSSHOW MODULESSHOW JARSSHOW JOBSSHOW 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,效率会高一大截。