MAPREDUCE服务 MRS-HBase本地二级索引介绍:HBase本地二级索引相关接口

时间:2024-09-19 09:08:43

HBase本地二级索引相关接口

使用HIndex的API都在类org.apache.hadoop.hbase.hindex.client.HIndexAdmin中,相关接口介绍如下:

表2 HBase Index相关接口

操作

接口

描述

注意事项

添加索引

addIndices()

将索引添加到没有数据的表中。调用此接口会将用户指定的索引添加到表中,但会跳过生成索引数据。因此,在此操作之后,索引不能用于scan/filter操作。该接口使用场景为用户想要在具有大量预先存在用户数据的表上批量添加索引,其具体操作为使用诸如TableIndexer工具之类的外部工具来构建索引数据。

  • 索引一旦添加则不能修改。如果要修改,则需先删除旧的索引然后重新创建。
  • 应注意不要在具有不同索引名称的相同列上创建两个索引,否则将会导致数据存储和查询处理的资源浪费。
  • 索引不能添加到系统表中。
  • 向索引列put数据时不支持append和increment操作。
  • 如果客户端出现任何故障,除非发生DoNotRetryIOException,否则应该重试。
  • 索引列族按以下优先级从数据表中已存在的列族选取,优先级从高到低依次为:

    d、#、@、$、%、#0、@0、$0、%0、#1、@1 ...上至#255、@255、$255和%255

    创建索引时,系统会在表中按以上优先级顺序检查是否存在以上列族,如果不存在,则将第一个不存在的列族设为索引列族。

    例如:
    • 数据表中仅存在d列族,则索引列族默认为#。
    • 数据表中已存在d和#列族,则默认索引列族默认为@
    • 数据表中已存在d、#和$列族,则索引列族默认为@
  • 可以通过HIndex TableIndexer工具添加索引而无需建立索引数据。

addIndicesWithData()

将索引添加到有数据的表中。此方法将用户指定的索引添加到表中,并会对已经存在的用户数据创建对应的索引数据,也可先调用该方法生成索引再在存入用户数据的同时生成索引数据。在此操作之后,这些索引立即可用于scan/filter操作。

删除索引

dropIndices()

仅删除索引。该API从表中删除用户指定的索引,但跳过相应的索引数据。在此操作之后,索引不能用于scan/filter操作。集群在major compaction期间会自动删除旧的索引数据。

此API使用场景为表中包含大量索引数据且dropIndicesWithData()不可行。另外,也可以通过TableIndexer工具删除索引以及索引数据。

  • 在索引的状态为ACTIVE,INACTIVE和DROPPING时,允许禁用索引的操作。
  • 对于使用dropIndices()删除索引的操作,用户必须确保在将索引添加到具有相同索引名的表之前,相应的索引数据已被删除(即major compaction已完成)。
  • 用户删除相应的索引会删除:
    • 一个带有索引的列族。
    • 组合索引所有列族中的任一个列族。
  • 索引可以通过HIndex TableIndexer工具与索引数据一起删除。

dropIndicesWithData()

删除索引数据。此API删除用户指定的索引,并删除用户表中与这些索引对应的所有索引数据。在此操作之后,删除的索引完全从表中删除,不再可用于scan/filter操作。

启用/禁用索引

disableIndices()

该API禁用所有用户指定的索引,使其不再可用于scan/filter操作。

  • 在索引的状态为ACTIVE,INACTIVE和BUILDING时允许启用索引的操作。
  • 在索引的状态为ACTIVE和INACTIVE时允许禁用索引操作。
  • 在禁用索引之前,用户必须确保索引数据与用户数据一致。如果在索引处于禁用状态期间没有在表中添加新的数据,索引数据与用户数据将保持一致。
  • 启用索引时,可以通过使用TableIndexer工具构建索引来保证数据一致性。

enableIndices()

该API启用所有用户指定的索引,使其可用于scan/filter操作。

查看已创建的索引

listIndices()

该API可用于列出给定表中的所有索引。

support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_0506.html