**
**
可以参考一下例子
# 例子"012", "0", "123", "234", "3",
# 按 ASCII 字典排序后的结果为:"0", "012","123", "234", "3"。
# 也就是说按照字符的ASCII值从左开始排序的
假设我们的rowkey组成如下:prefix | time | row_id
prefix:前缀
time: 时间, 如20221011230000
row_id:id, id默认填充值为4位,也就id.zfill(4)
# 提供几组rowkey
prefix|20221011140000|3233
prefix|20221011150100|1312
prefix|20221011160000|1223
prefix|20221011150210|5212
prefix|20221011151000|9234
prefix|20221011152000|99991
假设有个场景:需要插入一个id长度为5位的row的,且这个id前四位都是999,现在想要扫描15:00-16:00这一个小时的数据
一开始封装的方法,是根据填充值生成rowkey的起始值和结束值,分别为:
rowstart: prefix|20221011150000|0000
rowstop: prefix|20221011160000|9999
最后,扫描结果如下:
prefix|20221011150100|1312
prefix|20221011160000|1223
prefix|20221011150210|5212
prefix|20221011151000|9234
prefix|20221011152000|99991这条rowkey的数据没有被扫描到。
这时,我们可以根据上面第一点的的特性:
HBase 中的数据是按照 Rowkey 的 ASCII 字典顺序进行全局排序的。
将起始rowkey设置为:
rowkey_start: prefix|20221011150000|
⚠️ 最后一个|后面是有一个空字符的 ‘’
将结束rowkey设置为:
rowkey_stop: prefix|20221011160000| ~
这里用空字符‘’作为起始点,因为空字符对应的ASCII值为0,是最小的,比字符0-9都小
用~ 作为结束,是因为~对应的ASCII值为126, 比字符9(ASCII值59)大
最后扫描结果如下:
prefix|20221011150100|1312
prefix|20221011160000|1223
prefix|20221011150210|5212
prefix|20221011151000|9234
prefix|20221011152000|99991
Hbase的scan主要是根据rowkey,从左到右进行扫描的,rowkey中的id主要用于filter,而不是用于scan中