文档首页> MapReduce服务 MRS> 组件操作指南(普通版)> 使用HBase> HBase常见问题> 使用scan命令仍然可以查询到已修改和已删除的数据
更新时间:2023-09-14 GMT+08:00

使用scan命令仍然可以查询到已修改和已删除的数据

问题

为什么使用如下scan命令仍然可以查询到已修改和已删除的数据?

scan '<table_name>',{FILTER=>"SingleColumnValueFilter('<column_family>','column',=,'binary:<value>')"}

回答

由于HBase的可扩展性,在查询表的时候,默认情况下会匹配被查询列的所有版本的值,即使被删除或被修改的值也可以查询出来。对于命中列失败的行(即在某一行中不存在该列),HBase会将该行查询出来。

如果用户仅需查询该表的最新值和命中列成功的行,可使用如下查询语句:

scan '<table_name>',{FILTER=>"SingleColumnValueFilter('<column_family>','column',=,'binary:<value>',true,true)"}

使用该命令,不但可以过滤掉命中列失败的行,而且查询的是表的当前数据的最新版本的值,即不查询被修改之前的值和被删除的值。

过滤器SingleColumnValueFilter的相关参数说明如下:

SingleColumnValueFilter(final byte[] family, final byte[] qualifier, final CompareOp compareOp, ByteArrayComparable comparator, final boolean filterIfMissing, final boolean latestVersionOnly)

参数说明:

  • family:需要查询的列所在的列族;
  • qualifier:需要查询的列;
  • compareOp:比较符,如“=”、“>”等;
  • comparator:需要查找的目标值;
  • filterIfMissing:如果某一行不存在该列,是否过滤,默认值为false;
  • latestVersionOnly:是否仅查询最新版本的值,默认值为false。