java—hbase将扫描不包含我希望返回的族的行

guykilcj  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(313)

我正在使用hbase cdh3,并且正在设计我的hbase表。假设我所有的行键都是散列的,我有两个列族colfama和colfamb。对于每一行,将有值存储在colfama或colfamb中,但不能同时存储在两者中。
如果我设置一个扫描器扫描每一行,我在扫描器中指定

Scan scan = new Scan();    
scan.addFamily(Bytes.toBytes("colFamA");
hTable.getScanner(scan);

所以我只需要colfama值,而不是colfamb值,我的扫描器是否仍然需要扫描不包含colfama数据的行(即只有colfamb值的行)?有colfamb的事实会减慢这个扫描吗?即使我没有将它添加为要在扫描中返回的列?

yvgpqqbh

yvgpqqbh1#

它只返回 colFamA

6l7fqoea

6l7fqoea2#

hbase中的数据存储在区域中,每个区域只有一个列族。当您扫描一个列族时,扫描仪将只读取与该列族相关的区域中的hfiles中该列族的数据。它不会从其余列族中读取数据。

wsewodh2

wsewodh23#

一个字的答案是不。
稍微长一点的答案是:hbase根本不处理扫描过程中不需要的家庭。每个族实际上都存储在不同的存储中,因此显然不需要在未指定的族中搜索某些内容。如果未指定族,则扫描所有族。
更详细的解释是:至少对于hbase0.96我看到有 RegionScanner 接口和 RegionScannerImpl 属于的类 HRegion . 此scanner构造函数检查是否已将族指定到 Scan 对象和其他扫描器列表基于族数组(每个存储)确定。

相关问题