我在hbase中的行键是长度不同的数字,如1,2,3 ..... 32423480,32423481 ..
当我使用
时 this.dropzone = new Dropzone('#my-dropzone', {
autoProcessQueue: false,
});
return this.dropzone.on('addedfile', (function(_this) {
return function(file) {
var IMAGE_EXTENSIONS, ext;
IMAGE_EXTENSIONS = 'png jpg jpeg gif'.split(' ');
ext = (_.last(file.name.split('.'))).toLowerCase();
if (_.include(IMAGE_EXTENSIONS, ext)) {
return console.log('IMAGE!');
} else {
return setTimeout(function() { // HERE!!!!!!!!!!!!!!!!!!!!
return _this.dropzone.processQueue();
}, 10);
}
};
})(this));
扫描表格,我只想要行1,2,3的结果,但它返回所有以1,2,3开头的行,如1003423,200034 ..
是否可以使用数字方式过滤行键范围使用hbase shell或java api?
由于
答案 0 :(得分:4)
我更熟悉Apache Accumulo(另一个BigTable实现),但我相信HBase的运作方式相似。
键按字典顺序排序,以便您观察到' 11'之前排序' 2'。通常,您所做的是格式化键以强制排序在您的域中有意义。因此,例如,如果您的键最大值为99999,则最多可以填充5个字符。
1 becomes 00001
2 becomes 00002
11 becomes 00011
etc
这样HBase会根据预期的数字排序对您的键进行排序,您可以扫描像(00001,00003)这样的范围。
答案 1 :(得分:2)
看起来你的HBase表中的键存储为字符串。这意味着像1,2,3等数字位于表的不同部分,并且它们之间还有许多其他键。所以你的问题的答案是:在单一扫描操作的帮助下,无法扫描你想要的数值范围。
但是你有两种方法可以解决你的问题:
1)更改密钥的架构。只需将您的密钥转换为整数并将其存储在HBase中。这样,您的密钥将存储为4个元素的字节数组(如果使用长整数,则存储为8个元素),并以完全数字方式在HBase中进行排序。此模式具有内存效率,但不具有外壳友好性,因为在HBase shell中,默认情况下只能键入字符串表示的键。如果你想要外壳友好但不那么节省内存的方式,你可以使用杰夫答案中提供的解决方案。
2)如果您不想将所有数据移至新的密钥架构,则可以使用Get操作代替Scan。只需为您范围内的每个元素调用get操作。显然,这种方法比一次扫描效率低得多,但它可以让你在没有数据转换的情况下获得所需的所有数据。