Apache spark 阅读带有hbase serde的蜂巢中凤凰腌制的hbase表

Apache spark 阅读带有hbase serde的蜂巢中凤凰腌制的hbase表,apache-spark,hbase,phoenix,Apache Spark,Hbase,Phoenix,我使用Phoenix SQL创建表查询创建了一个hbase表,还指定了salt_bucket。Salting按预期向行键添加前缀 我创建了一个外部配置单元表,以映射到此具有hbase serde的hbase表。问题是当我通过按rowkey进行筛选来查询此表时: 其中key=“value” 它不起作用,因为我认为salt pre-fix也被用于密钥。这限制了筛选键上数据的能力。选择: 其中行键类似于“%value” 工作正常,但整个表扫描可能需要很长时间 我的问题是如何在hive中高效地查询该表中

我使用Phoenix SQL创建表查询创建了一个hbase表,还指定了salt_bucket。Salting按预期向行键添加前缀

我创建了一个外部配置单元表,以映射到此具有hbase serde的hbase表。问题是当我通过按rowkey进行筛选来查询此表时:

其中key=“value”

它不起作用,因为我认为salt pre-fix也被用于密钥。这限制了筛选键上数据的能力。选择:

其中行键类似于“%value”

工作正常,但整个表扫描可能需要很长时间


我的问题是如何在hive中高效地查询该表中的行键值(去除盐的预修复)?

是的,您提到的是正确的

它不起作用,因为我认为盐的预处理也被拿来做钥匙

缓解这种情况的一种方法是使用散列而不是随机前缀。 并使用计算出的哈希值作为行键的前缀 使用此技术,您可以计算要扫描的行键的哈希值:

mod(hash(rowkey),n),其中n是将删除热点问题的区域数

使用随机前缀会带来您在问题中提到的问题

选择: 其中行键类似于“%value” 工作正常,但整个表扫描可能需要很长时间

这正是随机前缀盐渍的作用。HBase被迫扫描整个表以获得所需的值,因此,如果可以使用计算出的哈希值作为rowkey的前缀,效果会更好。 但是这种散列技术在范围扫描中不会被证明是好的

现在您可能会问,为什么我不能简单地用散列替换我的行键,并将行键存储为单独的列。 它可能/可能不起作用,但我建议以这种方式实现它,因为HBase对于列族已经非常敏感。 但我还是不清楚这个解决方案

您可能还想阅读更详细的解释