HBase 扫描 - RowKey 过滤器
HBase Scan - RowKey Filters
那么,让我们看看我能否简要解释一下我的问题。
假设我们有一个 HBase table,其中包含每次去迪斯科的信息:
每个迪斯科舞厅都会记录其名称、访问者的名称 以及访问者的天。 (是的,这是一个愚蠢的例子,我知道..)。
因此,例如,这些将是 table:
的一些值
..
ministryOfSoundJamesOliver01022017
ministryOfSoundJamesOliver02022017
ministryOfSoundJamesOliver03022017
ministryOfSoundOliviaNewton04042017
ministryOfSoundOliviaNewton06042017
...
pachaibizaJohnMcKiness06042017
pachaibizaJohnMcKiness04042017
pachaibizaWilliamForrester04042017
..
RowKey 具有以下结构:
discoName
personName
dayOfTheYear
(table还有一些其他的columns/qualifiers,但我不介意这个问题。
问题是:想象一个男孩只是喜欢去 Ministry Of Sound。他只是喜欢它,他把所有的钱都花在了迪斯科和毒品上(但这不是重点)。
我的目标是输出每一个参加声音部的人。在我的扫描中,这个家伙一直出现在结果中,所以我必须丢弃很多条目来寻找下一个访客。 F.E:
..
ministryOfSoundJohnnyYonkie01022017
ministryOfSoundJohnnyYonkie02022017
ministryOfSoundJohnnyYonkie03022017
ministryOfSoundJohnnyYonkie04022017
ministryOfSoundJohnnyYonkie05022017
ministryOfSoundAnotherDude02022017
...
为了注册 AnotherDude,我必须丢弃来自 Johnny 的 4 个条目。
最后的问题是:
有什么方法可以告诉 HBase 从 byte(x) 到 byte(x+y) 的重复条目 [x 是 [=12= 的字节数] 和来自 personName
] 的 y 个字节数必须 自动丢弃 ?
提前致谢!!
第一件事:如果你只有客户端访问权限,我帮不了你:(
如果您有额外的访问权限,那么您可以查看以下建议,但默认回复是:
如果这是您的访问模式,请为此优化您的模式。
如果您需要以某种方式访问数据,请确保首先以这种方式编写。如果必须执行迁移,请使用 map-reduce API。
我可能会简单地添加一个 table,它只为每个访问者写一行 ministerOfSound 和一列。 (一般来说,你提出的模式听起来不太适合 HBase - 因为你有一堆单调增加行键的写入,如果 post - 处理重复结果确实是一个性能问题)
另一方面,如果这是一个临时查询,那么您可能想立即使用 mapreduce-API - 也许使用 Apache Spark-interconnect 并执行 "distinct" 调用数据。
使用扫描进行分析查询不是我的做法。
如果您必须使用扫描来完成,那么我建议您实施协处理器。这些可以使用状态来增强 Filter,并且您可以在 Region Server 端投影 PrefixFilter's Scan 的结果。如果您是 CoProcessors 的新手,这里有一个介绍:HBase: The Definitive Guide。这要求您可以将 jar 部署到 RegionServer 类路径中。
但同样,如果您通过在那里进行不同的过滤来破坏您的客户端,您可能也会因为插入的热点而破坏您的区域。
作为最后的选择:您可能想看看 Apache Phoenix,看看是否可以将您的 rowkey 强制转换为一个模式,您可以从中对前两部分执行 select distinct行键。这显然需要您在 rowkey 中有分隔符,或者至少是固定长度。
那么,让我们看看我能否简要解释一下我的问题。
假设我们有一个 HBase table,其中包含每次去迪斯科的信息: 每个迪斯科舞厅都会记录其名称、访问者的名称 以及访问者的天。 (是的,这是一个愚蠢的例子,我知道..)。
因此,例如,这些将是 table:
的一些值..
ministryOfSoundJamesOliver01022017
ministryOfSoundJamesOliver02022017
ministryOfSoundJamesOliver03022017
ministryOfSoundOliviaNewton04042017
ministryOfSoundOliviaNewton06042017
...
pachaibizaJohnMcKiness06042017
pachaibizaJohnMcKiness04042017
pachaibizaWilliamForrester04042017
..
RowKey 具有以下结构:
discoName
personName
dayOfTheYear
(table还有一些其他的columns/qualifiers,但我不介意这个问题。
问题是:想象一个男孩只是喜欢去 Ministry Of Sound。他只是喜欢它,他把所有的钱都花在了迪斯科和毒品上(但这不是重点)。
我的目标是输出每一个参加声音部的人。在我的扫描中,这个家伙一直出现在结果中,所以我必须丢弃很多条目来寻找下一个访客。 F.E:
..
ministryOfSoundJohnnyYonkie01022017
ministryOfSoundJohnnyYonkie02022017
ministryOfSoundJohnnyYonkie03022017
ministryOfSoundJohnnyYonkie04022017
ministryOfSoundJohnnyYonkie05022017
ministryOfSoundAnotherDude02022017
...
为了注册 AnotherDude,我必须丢弃来自 Johnny 的 4 个条目。
最后的问题是:
有什么方法可以告诉 HBase 从 byte(x) 到 byte(x+y) 的重复条目 [x 是 [=12= 的字节数] 和来自 personName
] 的 y 个字节数必须 自动丢弃 ?
提前致谢!!
第一件事:如果你只有客户端访问权限,我帮不了你:(
如果您有额外的访问权限,那么您可以查看以下建议,但默认回复是: 如果这是您的访问模式,请为此优化您的模式。
如果您需要以某种方式访问数据,请确保首先以这种方式编写。如果必须执行迁移,请使用 map-reduce API。
我可能会简单地添加一个 table,它只为每个访问者写一行 ministerOfSound 和一列。 (一般来说,你提出的模式听起来不太适合 HBase - 因为你有一堆单调增加行键的写入,如果 post - 处理重复结果确实是一个性能问题)
另一方面,如果这是一个临时查询,那么您可能想立即使用 mapreduce-API - 也许使用 Apache Spark-interconnect 并执行 "distinct" 调用数据。
使用扫描进行分析查询不是我的做法。
如果您必须使用扫描来完成,那么我建议您实施协处理器。这些可以使用状态来增强 Filter,并且您可以在 Region Server 端投影 PrefixFilter's Scan 的结果。如果您是 CoProcessors 的新手,这里有一个介绍:HBase: The Definitive Guide。这要求您可以将 jar 部署到 RegionServer 类路径中。
但同样,如果您通过在那里进行不同的过滤来破坏您的客户端,您可能也会因为插入的热点而破坏您的区域。
作为最后的选择:您可能想看看 Apache Phoenix,看看是否可以将您的 rowkey 强制转换为一个模式,您可以从中对前两部分执行 select distinct行键。这显然需要您在 rowkey 中有分隔符,或者至少是固定长度。