更新时间:2025-07-17 GMT+08:00
分享

查询HBase全局二级索引信息

查询HBase全局二级索引信息

用户可以使用全局二级索引工具批量查看某个数据表相关索引的定义及状态。

在HBase客户端执行以下命令可索引的定义及状态:

hbase org.apache.hadoop.hbase.hindex.global.mapreduce.GlobalTableIndexer -Dtablename.to.show='table'

相关参数介绍如下:

tablename.to.show:表示需查看相关索引定义的数据表名称。

查询结果如图1所示,会打印索引列定义、覆盖列定义、TTL、预分区信息、索引状态等:

图1 索引查询结果

基于索引查询HBase表数据

在具有索引的用户表中,可以使用SingleColumnValueFilter来查询数据。当查询条件可以命中索引时,查询速度远快于原表查询。

索引的命中规则如下:

  • 多个AND条件查询。
    • 当用于查询的列至少包含索引第一个列时,使用索引会提高查询性能。

      例如,为C1、C2和C3创建组合索引。

      该索引在以下情况下生效:

      Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol2)AND Filter_Condition(IndexCol3)
      Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol2)
      Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol3)
      Filter_Condition(IndexCol1)

      该索引在下列情况下不生效:

      Filter_Condition(IndexCol2)AND Filter_Condition(IndexCol3)
      Filter_Condition(IndexCol2)
      Filter_Condition(IndexCol3)
    • 当在查询中使用“索引列和非索引列”进行过滤时,使用索引可提高查询性能。当非索引列命中覆盖列时,查询性能最优;如果有需经常查询的非索引列,建议定义为覆盖列。例如:
      Filter_Condition(IndexCol1)AND Filter_Condition(NonIndexCol1)
      Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol2)AND Filter_Condition(NonIndexCol1)
    • 当多个列用于查询时,只能为组合索引中的最后一列指定值范围,而其他列只能设置为指定值。

      例如,为C1、C2和C3创建组合索引。在范围查询中,只能为C3设置数值范围,过滤条件为“C1 = XXX,C2 = XXX,C3 = 数值范围”。

  • 多个OR条件查询。
    例如,为C1、C2和C3创建组合索引。
    • 仅对索引列首个字段进行进行过滤时(支持范围过滤),使用索引可提高查询性能。
      Filter_Condition(IndexCol1)OR Filter_Condition(IndexCol1)OR  Filter_Condition(IndexCol1)
    • 对非索引和非索引列进行过滤时,无法命中索引,查询性能不会提高。
      Filter_Condition(IndexCol1)OR Filter_Condition(NonIndexCol1)
    • 组合查询时,最外层包含OR条件时无法命中索引,查询性能不会提高。
      Filter_Condition(IndexCol1)OR Filter_Condition(NonIndexCol1)
      (Filter_Condition(IndexCol1)AND Filter_Condition(IndexCol2))OR(Filter_Condition(NonIndexCol1))

    减少OR条件使用,尤其是OR条件+范围条件,命中索引的情况下也会造成查询大范围查询,速度较慢。

相关文档