COMPUTE STATS 语句用于收集表及其所有关联列和分区中关于数据量和分布的信息。这些统计信息存储在元数据中,TCHouse-X 的查询优化器依靠这些统计信息来准确判断表的大小、不同值的数量(基数)、数据倾斜程度等,从而为 连接 (JOIN)、聚合 (Aggregation) 或 插入 (INSERT) 等操作生成更高效的执行计划。完整统计信息
语法
COMPUTE STATS [db_name.]table_name [ ( column_list ) ]column_list ::= column_name [ , column_name, ... ]
使用说明
完整扫描 (默认):如果未提供
column_list,COMPUTE STATS 会为表中的所有列计算统计信息。指定列:可通过可选的逗号分隔列列表指定要计算统计信息的列。这适用于宽表或大型字符串列,可避免不必要的开销。
错误处理:当指定的列不存在或列类型(如复杂类型)不受支持时,语句将报错。如果提供空列表,则不分析任何列。
性能考量
COMPUTE STATS 是 ETL 过程结束时的一个关键步骤。准确的统计信息是生成高效查询计划、提升性能和降低内存使用的基础。优化连接: 准确的统计信息能帮助 TCHouse-X 为连接查询构建高效的执行计划。
资源管理: 统计信息有助于 TCHouse-X 估算每个查询所需的内存,这对于使用准入控制 (Admission Control) 尤其重要。
性能调优: 对于大表,
COMPUTE STATS 语句本身可能耗时较长。直方图:
COMPUTE STATS 还可以收集列的直方图信息,但出于性能考虑,该功能默认关闭。示例
这个示例展示了两张表
T1 和 T2,它们通过 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 |-- +--------+--------+------------------+--------+----------+----------+