Updated on 2024-04-29 GMT+08:00

Restrictions

Application Scenarios

  • GSIs cannot be used together with HIndexes. That is, they cannot be created in the same data table.
  • Index tables do not support DR.
  • DISABLE, DROP, MODIFY, and TRUNCATE cannot be directly performed on index tables.
  • Index definition cannot be modified. You need to delete definitions and create indexes again. Other DDL operations on indexes are allowed, for example, modify index status, and delete and create indexes.

Creating Indexes

  • An index name must comply with the regular expression requirements and does not support other characters. Regular expressions support the characters of [a-zA-Z_0-9-.].
  • The data table specified for index creation must exist. An index cannot be repeatedly created.
  • The index table cannot have multiple versions.

    Indexes cannot be created on data tables with multiple versions (VERSION>1). The VERSION=1 setting is a must.

  • The number of indexes in a single data table cannot exceed five.

    Do not create too many indexes for a data table. Otherwise, bigger storage is required and write operations become slow. If more than five indexes need to be created, add the hbase.gsi.max.index.count.per.table parameter to the custom configuration hbase.hmaster.config.expandor of HMaster and set the parameter to a value greater than 5. Restart HMaster to make the configuration take effect.

  • The index name can contain a maximum of 18 characters.

    Do not use long index names. If you have to, add the hbase.gsi.max.index.name.length parameter to the custom configuration hbase.hmaster.config.expandor of HMaster, set the parameter to a value greater than 18, and restart HMaster to make the configuration take effect.

  • Indexes cannot be created for index tables.

    Indexes cannot be nested. Index tables are used only to accelerate queries and do not provide data table functions.

  • Indexes that can be covered by existing indexes cannot be created.

    If indexes you want to create are a subset of the existing indexes, they cannot be created. Duplicate indexes waste storage space. In the following example, index 2 cannot be created:

    Creating a table

    create 't1','cf1'

    Creating index 1

    hbase org.apache.hadoop.hbase.hindex.global.mapreduce.GlobalTableIndexer -Dtablename.to.index='t1' -Dindexspecs.to.add='idx1=>cf1:[q1],[q2]'

    Creating index 2

    hbase org.apache.hadoop.hbase.hindex.global.mapreduce.GlobalTableIndexer -Dtablename.to.index='t1' -Dindexspecs.to.add='idx2=>cf1:[q1]'
  • Indexes with the same name cannot be created in the same data table, but can be created in different data tables.
  • The TTL of a column family in an index table is inherited from the original table, and must be the same as that of the original table.

    The TTLs of all column families in an index table are the same and are inherited from a data table. The TTLs of associated column families in the data table must be the same. Otherwise, associated indexes cannot be created.

  • Properties of user-defined index tables are not supported.

Writing Indexes

  • Only the Put/Delete interface can be used to generate index data. If data is written to a data table with other methods (such as Increment and Append), the corresponding index will not be generated.
  • When the index column data is defined as the string type, do not write special characters \x00 and \x01 (special invisible characters).
  • Do not write data to index columns by specifying timestamps.

Index Query

  • The index status must be ACTIVE during an index query.
  • Index queries do not support specified timestamp ranges. If you need to query data within a time range by index, add a time column to store data timestamps. Otherwise, the data table will be used for query.
  • Index query supports only SingleColumnValueFilter. Index acceleration cannot be triggered when other filters are used or no filter condition is used.