我创建了一个带有Phoenix SQL创建表查询的hbase表,并且还指定了salt_buckets。 Salting按预期为rowkey添加前缀。
我创建了一个外部hive表,用hbase serde映射到这个hbase表问题是当我通过对rowkey进行过滤来查询这个表时:
其中key =“value”
它不起作用,因为我认为盐预修复也是为了获取密钥。这限制了在密钥上过滤数据的能力。选项:
“其中rowkey喜欢”%value“
有效,但整个表扫描的时间可能很长。
我的问题是如何在hive中的行键值上有效地查询此表(剥离盐预修复)?
答案 0 :(得分:0)
是的,在提及
时你是对的它不起作用,因为我认为盐预修复也是为了获取密钥。 '
缓解的一种方法是使用散列而不是随机前缀。 并使用计算的哈希为rowkey添加前缀 使用此技术,您可以计算要扫描的rowkey的哈希值。:
mod(hash(rowkey),n)其中n是区域数量将删除热点问题
使用随机前缀会带来您在问题中提到的问题。
选项: "其中rowkey喜欢"%value" 可行,但整个表扫描的时间可能很长。
这正是随机前缀salting所做的。 HBase被强制扫描整个表以获得所需的值,因此如果你可以为你的rowkey添加其计算的Hash前缀会更好。 但是这种散列技术在范围扫描中不会很好。
现在你可能会问,为什么我不能简单地用它的Hash替换我的rowKey并将rowkey存储为单独的列。 它可能/可能不起作用,但我建议以这种方式实现它,因为HBase在列系列方面已经非常敏感。 但是我再也不清楚这个解决方案了。
您还可以阅读this以获取更详细的说明。