:original_name: mrs_01_1635.html .. _mrs_01_1635: Using a Secondary Index ======================= Scenario -------- HIndex enables HBase indexing based on specific column values, making the retrieval of data highly efficient and fast. Constraints ----------- - Column families are separated by semicolons (;). - Columns and data types must be contained in square brackets ([]). - The column data type is specified by using -> after the column name. - If the column data type is not specified, the default data type (string) is used. - The number sign (#) is used to separate two index details. - The following is an optional parameter: -Dscan.caching: number of cached rows when the data table is scanned. The default value is set to 1000. - Indexes are created for a single region to repair damaged indexes. This function is not used to generate new indexes. Procedure --------- #. Install the HBase client. For details, see :ref:`Using an HBase Client `. #. Go to the client installation directory, for example, **/opt/client**. **cd /opt/client** #. Run the following command to configure environment variables: **source bigdata_env** #. If the cluster is in security mode, run the following command to authenticate the user. In normal mode, user authentication is not required. **kinit** *Component service user* #. Run the following command to access HIndex: **hbase org.apache.hadoop.hbase.hindex.mapreduce.TableIndexer** .. table:: **Table 1** Common HIndex commands +----------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Description | Command | +==================================+================================================================================================================================================================================+ | Add Index | TableIndexer-Dtablename.to.index=table1-Dindexspecs.to.add='IDX1=>cf1:[q1->datatype],[q2],[q3];cf2:[q1->datatype],[q2->datatype]#IDX2=>cf1:[q5]' | +----------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Create Index | TableIndexer -Dtablename.to.index=table1 -Dindexnames.to.build='IDX1#IDX2' | +----------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Delete Index | TableIndexer -Dtablename.to.index=table1 -Dindexnames.to.drop='IDX1#IDX2' | +----------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Disable Index | TableIndexer -Dtablename.to.index=table1 -Dindexnames.to.disable='IDX1#IDX2' | +----------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Add and Create Index | TableIndexer -Dtablename.to.index=table1 -Dindexspecs.to.add='IDX1=>cf1:[q1->datatype],[q2],[q3];cf2:[q1->datatype],[q2->datatype]#IDX2=>cf1:[q5] -Dindexnames.to.build='IDX1' | +----------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Create Index for a Single Region | TableIndexer -Dtablename.to.index=table1 -Dregion.to.index=regionEncodedName -Dindexnames.to.build='IDX1#IDX2' | +----------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ .. note:: - **IDX1**: indicates the index name. - **cf1**: indicates the column family name. - **q1**: indicates the column name. - **datatype**: indicates the data type, including String, Integer, Double, Float, Long, Short, Byte and Char.