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 细节):
StreamExecutionEnvironmentenv=StreamExecutionEnvironment.getExecutionEnvironment();StreamTableEnvironmenttEnv=StreamTableEnvironment.create(env);// show catalogstEnv.executeSql("SHOW CATALOGS").print();// show current catalogtEnv.executeSql("SHOW CURRENT CATALOG").print();// create a catalogtEnv.executeSql("CREATE CATALOG cat2 WITH (...)");// show create catalogtEnv.executeSql("SHOW CREATE CATALOG cat2").print();// show databasestEnv.executeSql("SHOW DATABASES").print();// show current databasetEnv.executeSql("SHOW CURRENT DATABASE").print();// create a tabletEnv.executeSql("CREATE TABLE my_table (...) WITH (...)");// show tablestEnv.executeSql("SHOW TABLES").print();// show create tabletEnv.executeSql("SHOW CREATE TABLE my_table").print();// show columns with LIKE filtertEnv.executeSql("SHOW COLUMNS FROM my_table LIKE '%f%'").print();// create a viewtEnv.executeSql("CREATE VIEW my_view AS SELECT * FROM my_table");// show viewstEnv.executeSql("SHOW VIEWS").print();// show create viewtEnv.executeSql("SHOW CREATE VIEW my_view").print();// show functionstEnv.executeSql("SHOW FUNCTIONS").print();// show user functionstEnv.executeSql("SHOW USER FUNCTIONS").print();// show modulestEnv.executeSql("SHOW MODULES").print();// show full modulestEnv.executeSql("SHOW FULL MODULES").print();4. Catalog / Database:先找“你在哪里”,再找“你有什么”
4.1 SHOW CATALOGS:列出所有 catalog(支持 LIKE/ILIKE/NOT)
SHOWCATALOGS[[NOT](LIKE|ILIKE)<sql_like_pattern>]LIKE:大小写敏感ILIKE:大小写不敏感pattern 规则沿用 MySQL:
%任意长度(可为 0)_单字符\%、\_表示字面量
例子:
SHOWCATALOGS;SHOWCATALOGSLIKE'%log1';SHOWCATALOGS ILIKE'%LOG1';4.2 SHOW CURRENT CATALOG:当前 catalog 是谁?
SHOWCURRENTCATALOG;4.3 SHOW CREATE CATALOG:打印 catalog 的创建语句
SHOWCREATECATALOG catalog_name;输出包含 catalog 名称与属性配置,适合做“环境对照/复刻”。
4.4 SHOW DATABASES:列出某个 catalog 下的库(可选)
SHOWDATABASES[(FROM|IN)catalog_name][[NOT](LIKE|ILIKE)<pattern>]4.5 SHOW CURRENT DATABASE:当前 database 是谁?
SHOWCURRENTDATABASE;5. Table / View:列清单 + 复刻 DDL(最常用)
5.1 SHOW TABLES:列出表(可指定库,可 LIKE/NOT LIKE)
SHOWTABLES[(FROM|IN)[catalog_name.]database_name][[NOT]LIKE<pattern>]例子(官方示例风格):
SHOWTABLESFROMdb1;SHOWTABLESFROMcatalog1.db1;SHOWTABLESFROMdb1LIKE'%n';SHOWTABLESFROMdb1NOTLIKE'%n';SHOWTABLES;5.2 SHOW CREATE TABLE:一键打印建表 DDL
SHOWCREATETABLE[[catalog_name.]db_name.]table_name;输出包含:
- 表名(通常是全限定名)
- 字段名、类型
- 约束(如 PK NOT ENFORCED)
- 注释
- watermark、计算列等
- WITH 配置(connector/options)
注意:当前只支持 Flink SQL DDL 创建的表。
5.3 SHOW VIEWS / SHOW CREATE VIEW:视图同理
SHOWVIEWS[(FROM|IN)[catalog_name.]database_name][[NOT]LIKE<pattern>];SHOWCREATEVIEW[catalog_name.][db_name.]view_name;6. 列、分区与过程:排障时“特别顶用”的三件套
6.1 SHOW COLUMNS:列结构速查(支持 LIKE/NOT LIKE)
SHOWCOLUMNS(FROM|IN)[[catalog_name.]database.]table_name[[NOT]LIKE<pattern>];典型用途:
- 快速确认字段名、类型、是否可为空
- 判断是否存在 watermark / proctime / computed column
- 排查“写入字段不匹配”“字段名拼错”“类型不兼容”等问题
6.2 SHOW PARTITIONS:分区表排查神器
SHOWPARTITIONS[[catalog_name.]database.]table_name[PARTITION(k1=v1,k2=v2,...)];典型用途:
- “我明明写了数据,为什么查不到?”——先看分区是否写进了你预期的分区
- “我过滤条件生效了吗?”——对照分区列表比猜更靠谱
6.3 SHOW PROCEDURES:列出过程(可过滤)
SHOWPROCEDURES[(FROM|IN)[catalog_name.]database_name][[NOT](LIKE|ILIKE)<pattern>];7. Functions / Modules:函数找不到、解析怪?先看它俩
7.1 SHOW FUNCTIONS(系统函数 + UDF),SHOW USER FUNCTIONS(仅 UDF)
SHOW[USER]FUNCTIONS[(FROM|IN)[catalog_name.]database_name][[NOT](LIKE|ILIKE)<pattern>];7.2 SHOW MODULES / SHOW FULL MODULES:看模块启用状态与解析顺序
SHOW[FULL]MODULES;SHOW MODULES:仅显示“启用的模块”和解析顺序SHOW FULL MODULES:显示“已加载模块 + used(true/false) 状态 + 解析顺序”
很多“同名函数冲突/突然不可用”的根因,就是模块启用状态或解析顺序变化。
8. SQL CLI / SQL Gateway 限定:SHOW JARS、SHOW JOBS
SHOWJARS;SHOWJOBS;注意(官方强调):
- 目前
SHOW JARS/SHOW JOBS只在 SQL CLI 或 SQL Gateway 生效 - 在纯 Java TableEnvironment 场景下不一定可用(取决于你接入方式)
9. 模型:SHOW MODELS 与 SHOW CREATE MODEL
SHOWMODELS[(FROM|IN)[catalog_name.]database_name][[NOT](LIKE|ILIKE)<pattern>];SHOWCREATEMODEL[catalog_name.][db_name.]model_name;SHOW CREATE MODEL的输出包含:
- model 名称
- 输入/输出 schema
- model options 与其它配置
适合:理解既有模型结构、跨库复刻模型。
10. 一套“拿来就用”的排障顺序(强烈推荐)
当你遇到:表找不到 / 函数解析不对 / DDL 不清楚 / 分区数据缺失——按这个顺序走:
1)确认上下文
SHOWCURRENTCATALOG;SHOWCURRENTDATABASE;2)确认对象是否存在
SHOWTABLES;SHOWVIEWS;SHOWFUNCTIONS;3)对象太多就过滤
SHOWTABLESLIKE'%order%';SHOWFUNCTIONS ILIKE'%sha%';4)需要复刻/核对结构
SHOWCREATETABLExxx;SHOWCOLUMNSFROMxxx;5)分区问题
SHOWPARTITIONS xxx;6)函数冲突/不可用
SHOWFULLMODULES;SHOW/SHOW CREATE 在 Flink SQL 里不只是“看一眼”的命令,而是一套完整的元数据自检与复刻工具链:写 SQL 前先确认上下文,出问题先 SHOW 再猜,迁移环境直接 SHOW CREATE 复制 DDL,效率会高一大截。