hbase中的部分行键扫描

3hvapo4f  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(437)

在我的hbase部署中,我必须输入以下行键:
设备编号|日志时间
例如:454312 | 20180304124511
现在我想做一个部分行键扫描,即我只想在logtime范围内扫描
例如,我想得到logtimet1和t2之间的所有设备号?
请任何人帮忙。

stszievb

stszievb1#

hbase行按字母顺序排列,因此可以按前缀扫描,但不能按后缀扫描。
您可以做的一件事是根据字段logtime使用rowfilter-write filter逻辑扫描整个表。它将过滤服务器上的行,所以您的客户机代码将只获得正确的行。

8zzbczxx

8zzbczxx2#

使用过滤器时,完全扫描似乎是不可避免的,除非您知道在给定时间内可能出现的设备ID的大致范围,这可能并不总是可能的。
另一种实现方法是使用中间查找/索引表,将行键的第二部分Map到实际数据表中的第一部分或复合行键。这将使您的主要访问模式保持按设备id查找记录的状态,并且当您希望按第二个键进行查找时,请使用查找表查找数据表中的行键,并使用这些键获取所需的数据。但是,这种方法会让应用程序负责保持查找表同步,以更新/删除数据表。
对于索引的自动管理,您可以尝试phoenix,您可以创建一个phoenix表,其中包含logtime上的全局索引,下面是一些快速示例-

CREATE TABLE "SO50228751"(
"equipNum" integer not null,
"logtime" bigint not null,
"f"."data" varchar
CONSTRAINT pk PRIMARY KEY ("equipNum", "logtime"));

添加数据

upsert into "SO50228751"("equipNum", "logtime","f"."data")  values(454312,20180304124511,'a');
upsert into "SO50228751"("equipNum", "logtime","f"."data")  values(454312,20180304124512,'b');
upsert into "SO50228751"("equipNum", "logtime","f"."data")  values(454312,20180304124513,'c');
upsert into "SO50228751"("equipNum", "logtime","f"."data")  values(454312,20180304124514,'d');
upsert into "SO50228751"("equipNum", "logtime","f"."data")  values(454312,20180304124515,'e');
upsert into "SO50228751"("equipNum", "logtime","f"."data")  values(454313,20180304124521,'f');
upsert into "SO50228751"("equipNum", "logtime","f"."data")  values(454313,20180304124522,'g');
upsert into "SO50228751"("equipNum", "logtime","f"."data")  values(454313,20180304124523,'h');
upsert into "SO50228751"("equipNum", "logtime","f"."data")  values(454313,20180304124524,'i');
upsert into "SO50228751"("equipNum", "logtime","f"."data")  values(454312,20180304124524,'ii');

创建索引

CREATE INDEX so_idx ON "SO50228751"(logtime);

使用索引按日志时间查询

select /*+ /*+ INDEX("SO50228751" so_idx) */ * from "SO50228751" where "logtime" between 20180304124511 and 20180304124516;

在决定选择phoenix索引之前,请检查文档和此链接->https://community.hortonworks.com/articles/61705/art-of-phoenix-secondary-indexes.html 了解它们在您的用例中的适合程度。
希望这有帮助。

相关问题