
# 使用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)"}
```
使用该命令，不但可以过滤掉命中列失败的行，而且查询的是表的当前数据的最新版本的值，即不查询被修改之前的值和被删除的值。
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
过滤器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。
 
