跳到主要内容

分析表

在 Databend 中分析表的目的是计算表统计信息,例如列的不同数目。

什么是表统计文件?

表统计文件是一个保存表统计数据的 JSON 文件,例如表列的不同值。

Databend 为每个数据库和表创建一个唯一的 ID,用于存储表统计文件,并将它们保存到您的对象存储中的路径 <bucket_name>/[root]/<db_id>/<table_id>/。每个表统计文件以 UUID(32字符小写十六进制字符串)命名。

文件格式文件名存储文件夹
表统计JSON<32bitUUID>_<version>.json<bucket_name>/[root]/<db_id>/<table_id>/_ts/

语法

ANALYZE TABLE [ <database_name>. ]table_name
  • ANALYZE TABLE <table_name>

    估计表中每列的不同值数目,并在快照中重新计算列统计信息。

    • 执行后不显示估计结果。要显示估计结果,请使用函数 FUSE_STATISTIC
    • 该命令不是通过比较它们来识别不同值,而是通过计算存储段和块的数量。这可能导致估计结果和实际值之间有显著差异,例如,多个块持有相同的值。在这种情况下,Databend 建议在运行估计之前尽可能地压缩存储段和块以合并它们。
    • 在执行更新/删除/替换语句后,快照级别的列统计信息可能会被放大。您可以通过执行分析语句来纠正列统计信息。

示例

此示例估计表中每列的不同值数目,并使用函数 FUSE_STATISTIC 显示结果:

create table t(a uint64);

insert into t values (5);
insert into t values (6);
insert into t values (7);

select * from t order by a;

----
5
6
7

-- 在您运行估计与 OPTIMIZE TABLE 之前,FUSE_STATISTIC 不会返回任何结果。
select * from fuse_statistic('db_09_0020', 't');

analyze table `t`;

select * from fuse_statistic('db_09_0020', 't');

----
(0,3);


insert into t values (5);
insert into t values (6);
insert into t values (7);

select * from t order by a;

----
5
5
6
6
7
7

-- FUSE_STATISTIC 返回您上次估计的结果。要获取最新的估计值,请再次运行估计。
-- OPTIMIZE TABLE 不是通过比较它们来识别不同值,而是通过计算存储段和块的数量。
select * from fuse_statistic('db_09_0020', 't');

----
(0,3);

analyze table `t`;

select * from fuse_statistic('db_09_0020', 't');

----
(0,6);

-- 最佳实践:在运行估计之前压缩表。
optimize table t compact;

analyze table `t`;

select * from fuse_statistic('db_09_0020', 't');

----
(0,3);
这篇文章对您有帮助吗?
Yes
No
开始使用 Databend Cloud
低成本
快速分析
多种数据源
弹性扩展
注册