行键筛选器

jgzswidk  于 2021-06-10  发布在  Hbase
关注(0)|答案(1)|浏览(252)

那么,让我们看看我能否简单地解释一下我的问题。
假设我们有一个hbase表,其中包含每次访问迪斯科舞厅的信息:每个迪斯科舞厅都会注册自己的名字、访问者的名字以及他访问迪斯科舞厅的日期(是的,这是个愚蠢的例子,我知道……)。
例如,表中的一些值:

..
ministryOfSoundJamesOliver01022017
ministryOfSoundJamesOliver02022017
ministryOfSoundJamesOliver03022017
ministryOfSoundOliviaNewton04042017
ministryOfSoundOliviaNewton06042017
...
pachaibizaJohnMcKiness06042017
pachaibizaJohnMcKiness04042017
pachaibizaWilliamForrester04042017
..

rowkey具有以下结构:
不一致
人名
一年中的某一天
(表中有一些其他列/限定符,但我不介意它们用于本期)。
问题是:想象一下,一个男孩只是喜欢去音部。他就是喜欢,他把所有的钱都花在迪斯科和毒品上(但这不是重点)。
我的目标是输出每一个参加过声音部的人。在我的扫描中,这个家伙不断出现在结果中,所以我必须丢弃很多条目来搜索下一个访问者。f、 电子邮件:

..
ministryOfSoundJohnnyYonkie01022017
ministryOfSoundJohnnyYonkie02022017
ministryOfSoundJohnnyYonkie03022017
ministryOfSoundJohnnyYonkie04022017
ministryOfSoundJohnnyYonkie05022017
ministryOfSoundAnotherDude02022017
...

为了注册其他人,我必须放弃约翰尼的4个条目。
最后,问题是:
有没有办法告诉hbase从字节(x)到字节(x+y)的重复条目[x是从 discoName 和y字节数 personName ]必须自动丢弃吗?
提前多谢!!

w51jfk4q

w51jfk4q1#

第一件事:如果你只有客户端访问权限,我帮不了你:(
如果您有额外的访问权限,那么您可以查看以下命题,但默认的回答是:如果这是您的访问模式,请为它优化您的模式。
如果您需要以某种方式访问数据,首先要确保以这种方式编写数据。如果必须执行迁移,请使用map reduce api。
我可能只是简单地添加一个表,它只为每个访问者写一行ministryofsound和一列(一般来说,您建议的模式听起来不太适合hbase—因为您有一堆具有单调递增行键的写入,如果对重复结果进行后处理真的是一个性能问题的话)
另一方面,如果这是一个特殊查询,那么您可能希望直接使用MapReduceAPI—可能使用ApacheSpark interconnect并对数据执行“distinct”调用。
我不会用扫描来分析查询。
如果必须使用扫描来完成,那么我建议您实现一个协处理器。这些可以用状态扩充过滤器,并且您可以在区域服务器端投影prefixfilter的扫描结果。如果您不熟悉协处理器,这里有一个介绍:hbase:权威指南。这要求您可以将jar部署到regionserver类路径中。
但是同样,如果你通过在那里做一个不同的过滤来炸掉你的客户机,你也可能因为插入的热点而炸掉你的区域。
作为最后一种选择:您可能想看看apachephoenix,看看是否可以将rowkey强制到一个模式中,从这个模式中可以对rowkey的前两部分执行selectdistinct。这显然需要在行键中有分隔符,或者至少有一个固定长度。

相关问题