如何统计表行数

本文介绍如何统计云原生多模数据库 Lindorm宽表的总行数。

注意事项

通过HBase Shell工具统计表行数

已通过HBase Shell连接Lindorm宽表引擎,具体操作,请参见通过Lindorm Shell访问宽表引擎

通过HBase Shell工具使用COUNT命令可以精确的统计HBase表行数。执行COUNT命令的原理是将表的数据分批次全部扫描出来进行统计,所以建议在相同内网的ECS客户端上执行COUNT命令。如果通过公网执行COUNT命令,网络使用率会较大,导致统计效率降低。根据表结构的不同,扫描的速度会有所差别,使用COUNT命令扫描全表的速度可以小于10万行每秒。执行以下语句统计table表的总行数。

count 'table'

执行结果如下:统计结果显示

使用HBase RowCounter统计表行数

已通过HBase Shell连接Lindorm宽表引擎,具体操作请参见通过Lindorm Shell访问宽表引擎

RowCounter会在本地启动一个伪分布式的MR任务来进行COUNT操作。默认情况下这种方式是按照单个线程来执行的,统计速率与HBase Shell执行COUNT命令的统计速率差不多。如果您想提高统计速度,可以通过指定Dmapreduce.local.map.tasks.maximum=线程数来进行多线程并发执行,需要注意以下两点:

  • 线程数小于等于表Region的个数。

  • 线程数增多可能造成集群负载过高从而影响线上业务,请根据业务需求设置。

在HBase Shell中执行以下代码统计Lindorm宽表的行数。

  • 统计目标表table的总行数。

    ./alihbase-2.0.18/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter  "table"
  • 统计目标表table的总行数,16个线程并发执行。

    ./alihbase-2.0.18/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter -Dmapreduce.local.map.tasks.maximum=16 "table"
  • 统计NameSpace为ns中的目标表table的总行数。

    ./alihbase-2.0.18/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter  "ns:table"

执行结果保存在Log目录中的hbase.log文件。image

通过Lindorm SQL统计表行数

已通过Lindorm-cli连接宽表引擎,具体操作请参见通过Lindorm-cli连接并使用宽表引擎

通过Lindorm SQL统计表行数的速度比使用HBase RowCounter统计表行数的速度快,是因为Lindorm自动将COUNT的统计逻辑分布式地下发给每一个Lindorm进程,相当于多线程进行统计,而HBase Shell是单线程进行统计。但是COUNT的统计过程仍然是扫描全表,同时Lindorm SQL中的执行语句默认超时时间为120秒,如果120秒内仍然无法统计出结果,该语句会超时报错。使用Lindorm SQL统计表行数的速度大概可以达到每台每秒数十万行,由于COUNT是分布式进行,集群的机器越多越快。

执行以下代码统计table表行数。

SELECT COUNT(*) FROM table;

执行结果如下:

+--------+
| EXPR$0 |
+--------+
| 16000  |
+--------+
重要

统计行数需要扫描全表,请慎重操作,如果数据量超过百万,建议使用搜索索引加速:通过搜索索引查询宽表数据

通过集群管理系统粗略查看表行数

已进入Lindorm集群管理系统,具体操作请参见登录集群管理系统

Lindorm集群管理系统中,在概览页面可以粗略查看表行数。该估计值是通过将数据文件的行数元信息累加计算出来的。如果用户存在更新,删除等操作,同一行数据可能分布在多个文件当中。同时,文件的行数元信息是在生成文件时统计的,如果用户使用了TTL功能,文件中的部分数据可能已经过期了,从而导致该信息不准。因此,该值仅仅只是一个估计值。但如果用户的表没有更新,没有删除和TTL过期,显示的行数是完全准确的,可以在历史数据迁移完成时用于估计数据完整性。

Lindorm集群管理系统中,单击左侧导航栏概览,在当前idc区域下,找到目标表,在预估行列中单击查看,查看目标表的粗略行数。image

说明

如果表中有数据但预估行数显示为0,则说明当前Lindorm宽表引擎小版本过低,请升级Lindorm宽表引擎小版本。如何升级,请参见升级小版本