COMPUTE STATS 语句

最近更新时间:2026-05-06 16:28:12

我的收藏
COMPUTE STATS 语句用于收集表及其所有关联列和分区中关于数据量和分布的信息。这些统计信息存储在元数据中,TCHouse-X 的查询优化器依靠这些统计信息来准确判断表的大小、不同值的数量(基数)、数据倾斜程度等,从而为 连接 (JOIN)、聚合 (Aggregation) 或 插入 (INSERT) 等操作生成更高效的执行计划。

完整统计信息

语法

COMPUTE STATS [db_name.]table_name [ ( column_list ) ]
column_list ::= column_name [ , column_name, ... ]

使用说明

完整扫描 (默认):如果未提供 column_listCOMPUTE STATS 会为表中的所有列计算统计信息。
指定列:可通过可选的逗号分隔列列表指定要计算统计信息的列。这适用于宽表或大型字符串列,可避免不必要的开销。
错误处理:当指定的列不存在或列类型(如复杂类型)不受支持时,语句将报错。如果提供空列表,则不分析任何列。

性能考量

COMPUTE STATS 是 ETL 过程结束时的一个关键步骤。准确的统计信息是生成高效查询计划、提升性能和降低内存使用的基础。
优化连接: 准确的统计信息能帮助 TCHouse-X 为连接查询构建高效的执行计划。
资源管理: 统计信息有助于 TCHouse-X 估算每个查询所需的内存,这对于使用准入控制 (Admission Control) 尤其重要。
性能调优: 对于大表,COMPUTE STATS 语句本身可能耗时较长。
直方图: COMPUTE STATS 还可以收集列的直方图信息,但出于性能考虑,该功能默认关闭。

示例

这个示例展示了两张表 T1T2,它们通过 T1.ID 与 T2.PARENT 之间的父子关系关联,且具有较少的不同值。T1 的数据量很小,而 T2 大约有 100 000 行。最初,统计信息仅包含物理度量,例如文件数、总大小,以及针对固定长度列(如 INT 类型)的大小度量。未知值用 -1 表示。对每张表运行 COMPUTE STATS 之后,通过 SHOW STATS 语句可以获取更多详细信息。如果要对这两张表进行连接查询,就需要同时拥有它们的统计信息,才能获得最有效的查询优化。
-- 查看表 t1 的统计信息
show table stats t1;
-- 结果
-- +-------+--------+------+--------+
-- | #Rows | #Files | Size | Format |
-- +-------+--------+------+--------+
-- | -1 | 1 | 33B | TEXT |
-- +-------+--------+------+--------+

-- 查看表 t2 的统计信息
show table stats t2;
-- 结果
-- +-------+--------+----------+--------+
-- | #Rows | #Files | Size | Format |
-- +-------+--------+----------+--------+
-- | -1 | 28 | 960.00KB | TEXT |
-- +-------+--------+----------+--------+

-- 查看表 t1 的列统计信息
show column stats t1;
-- 结果
-- +--------+--------+------------------+--------+----------+----------+
-- | Column | Type | #Distinct Values | #Nulls | Max Size | Avg Size |
-- +--------+--------+------------------+--------+----------+----------+
-- | id | INT | -1 | -1 | 4 | 4 |
-- | s | STRING | -1 | -1 | -1 | -1 |
-- +--------+--------+------------------+--------+----------+----------+

-- 查看表 t2 的列统计信息
show column stats t2;
-- +--------+--------+------------------+--------+----------+----------+
-- | Column | Type | #Distinct Values | #Nulls | Max Size | Avg Size |
-- +--------+--------+------------------+--------+----------+----------+
-- | parent | INT | -1 | -1 | 4 | 4 |
-- | s | STRING | -1 | -1 | -1 | -1 |
-- +--------+--------+------------------+--------+----------+----------+

-- 对 t1 执行统计信息收集
compute stats t1;
-- 结果
-- +-----------------------------------------+
-- | summary |
-- +-----------------------------------------+
-- | Updated 1 partition(s) and 2 column(s). |
-- +-----------------------------------------+

-- 查看表 t1 的统计信息
show table stats t1;
-- 结果
-- +-------+--------+------+--------+
-- | #Rows | #Files | Size | Format |
-- +-------+--------+------+--------+
-- | 3 | 1 | 33B | TEXT |
-- +-------+--------+------+--------+

-- 查看表 t1 的列统计信息
show column stats t1;
-- 结果
-- +--------+--------+------------------+--------+----------+----------+
-- | Column | Type | #Distinct Values | #Nulls | Max Size | Avg Size |
-- +--------+--------+------------------+--------+----------+----------+
-- | id | INT | 3 | -1 | 4 | 4 |
-- | s | STRING | 3 | -1 | -1 | -1 |
-- +--------+--------+------------------+--------+----------+----------+

-- 对 t2 执行统计信息收集
compute stats t2;
-- 结果
-- +-----------------------------------------+
-- | summary |
-- +-----------------------------------------+
-- | Updated 1 partition(s) and 2 column(s). |
-- +-----------------------------------------+

-- 查看表 t2 的统计信息
show table stats t2;
-- 结果
-- +-------+--------+----------+--------+
-- | #Rows | #Files | Size | Format |
-- +-------+--------+----------+--------+
-- | 98304 | 1 | 960.00KB | TEXT |
-- +-------+--------+----------+--------+

-- 查看表 t2 的列统计信息
show column stats t2;
-- 结果
-- +--------+--------+------------------+--------+----------+----------+
-- | Column | Type | #Distinct Values | #Nulls | Max Size | Avg Size |
-- +--------+--------+------------------+--------+----------+----------+
-- | parent | INT | 3 | -1 | 4 | 4 |
-- | s | STRING | 6 | -1 | 14 | 9.3 |
-- +--------+--------+------------------+--------+----------+----------+