
# 创建HBase全局二级索引
#### 场景介绍
对于未建立索引的用户表，该工具允许用户同时添加和构建索引。
#### 使用方法
在HBase客户端执行以下命令即可添加或创建索引，执行命令后，指定的索引将被添加到表中并且将处于ACTIVE状态：
```
hbase org.apache.hadoop.hbase.hindex.global.mapreduce.GlobalTableIndexer -Dtablename.to.index='table' -Dindexspecs.to.add='idx1=>cf1:[c1->string],[c2]#idx2=>cf2:[c1->string],[c2]#idx3=>cf1:[c1];cf2:[c1]' -Dindexspecs.covered.family.to.add='idx2=>cf1' -Dindexspecs.covered.to.add='idx1=>cf1:[c3],[c4]' -Dindexspecs.coveredallcolumn.to.add='idx3=>true' -Dindexspecs.splitkeys.to.set='idx1=>[\x010,\x011,\x012]#idx2=>[\x01a,\x01b,\x01c]#idx3=>[\x01d,\x01e,\x01f]'
```
相关参数介绍如下：
- **tablename.to.inde** **x**：表示创建索引的数据表的名称。
- **indexspecs.to.add**：表示与索引名与对应数据表的列的映射（索引列定义）。
- **indexspecs.covered.to.add**（可选）：表示索引中冗余存储的数据表的列（覆盖列定义）。
- **indexspecs.covered.family.to.add**（可选）：表示索引表冗余存储的数据表的列族（覆盖列族定义）。
- **indexspecs.coveredallcolumn.to.add**（可选）：表示索引表冗余存储数据表中的所有数据（覆盖所有列）。
- **indexspecs.splitkeys.to.set** （可选）：表示索引表预分区切分点，**建议指定** ，避免索引表Region成为热点。预分区指定格式为：
  - **'＃'**用于分隔索引。
  
  - splitkey包含在**'\[\]'**中。
  
  - **','** 用于分隔splitkey。
    ![](https://support.huaweicloud.com/usermanual-cloudtable/public_sys-resources/note_3.0-zh-cn.png)
    预分区每个splitkey必须由**\\x01**开头。
    
   
- **indexspecs.to.addandbuild** （可选）：表示创建时同时生成索引数据，数据表数据量较大时**不建议使用** ，建议使用索引数据生成工具完成索引数据生成。
  上述命令中的参数描述如下：
  - **idx1、idx2、idx3**：表示索引名称。
  
  - **cf1、cf2**：表示列族名称。
  
  - **c1、c2、c3、c4**：表示列名称。
  
  - **string**：表示数据类型。支持STRING、INTEGER、FLOAT、LONG、DOUBLE、SHORT、BYTE和CHAR。
  
  
  ![](https://support.huaweicloud.com/usermanual-cloudtable/public_sys-resources/note_3.0-zh-cn.png)
  - **'＃'** 用于分隔索引，**';'** 用于分隔列族，**','**用于分隔列限定符。
  
  - 列名及其数据类型应包含在**'\[\]'**中。
  
  - 列名及其数据类型通过**' - \>'**分隔。
  
  - 如果未指定具体列的数据类型，则使用默认数据类型（string）。
    
 
