查看结构用哪些语句
看表结构主要靠两条语句:SHOW CREATE TABLE 给出完整建表语句,DESCRIBE TABLE 列出列名、类型与默认值。SHOW TABLES 与 EXISTS TABLE 用于在脚本里探测库表是否存在,配合 LIKE 可以批量筛选。
系统表能做得更细
system.tables 提供引擎、排序键、分区键与建表语句,system.columns 提供列维度的类型、默认表达式与压缩编码。需要按条件筛选或跨库比对时,查系统表比逐条执行 SHOW 更高效,返回结果也更容易被脚本消费。
基本信息
| 常用语句 | SHOW TABLES [FROM db] [LIKE ...]、SHOW CREATE TABLE t、DESCRIBE TABLE t、EXISTS TABLE t |
|---|---|
| 系统表 | system.tables 查引擎与键定义,system.columns 查列定义与编码 |
| 过滤能力 | SHOW TABLES 支持 LIKE 与 NOT LIKE,也可用 FROM 限定数据库 |
| 脚本友好 | DESCRIBE 与 SHOW TABLES 这类结果集可加 FORMAT 便于解析 |
| 适用版本 | MergeTree 家族各主流版本均支持 |
示例
示例
SHOW CREATE TABLE analytics.events;
DESCRIBE TABLE analytics.events;
SHOW TABLES FROM analytics LIKE 'event%';
SELECT name, type, default_expression, compression_codec FROM system.columns
WHERE database = 'analytics' AND table = 'events';
SELECT engine, sorting_key, partition_key FROM system.tables
WHERE database = 'analytics' AND name = 'events';
SELECT create_table_query FROM system.tables
WHERE database = 'analytics' AND name = 'events';典型使用场景
- 复制结构:把 SHOW CREATE 的输出改一改,用于新表或新环境
- 核对引擎:确认是 MergeTree 家族还是分布式表
- 脚本探测:用 EXISTS TABLE 判断是否需要提前建表
- 排查类型问题:列类型与预期不符时用 DESCRIBE 定位
- 批量盘点:用 system.columns 找出缺少默认值或编码配置的列
语句与适用场景
| 语句 | 输出内容 | 适用场景 |
|---|---|---|
| SHOW CREATE TABLE | 完整建表语句含列编码 | 复制结构、核对引擎与键定义 |
| DESCRIBE TABLE | 列名、类型与默认值 | 快速确认字段,比较两表差异 |
| SHOW TABLES | 当前库的表清单 | 浏览或配合 LIKE 筛选 |
| EXISTS TABLE | 存在性判断,返回 0 或 1 | 脚本里做幂等检查 |
| system.columns | 列级元数据 | 按条件筛选与批量比对 |
SHOW CREATE TABLE 的输出可以直接用于复制表结构,跨环境迁移时注意连同列编码与表级设置一起带走,否则新表的压缩与写入行为会与原表不同。
DESCRIBE 不显示表引擎、排序键与分区键,核对建表定义必须看 SHOW CREATE TABLE 或 system.tables;遇到结构相似但查询快慢差很多的表,先把两份建表语句做一次比对。
跨环境比结构时不要只看列名:默认表达式与压缩编码的差异不会体现在列清单里,却会让写入与查询表现不同,核对时把两边的 SHOW CREATE 输出落到文件再逐行比对。