
# Phoenix BulkLoad Tool使用限制说明
#### 问题
当更新索引字段数据时，若用户表已经存在一批数据，则BulkLoad工具不能更新全局和局部可变索引。
#### 回答
**问题分析**
1. 创建表。
   ```
   CREATE TABLE TEST_TABLE(
   DATE varchar not null,
   NUM integer not null,
   SEQ_NUM integer not null,
   ACCOUNT1 varchar not null,
   ACCOUNTDES varchar,
   FLAG varchar,
   SALL double,
   CONSTRAINT PK PRIMARY KEY (DATE,NUM,SEQ_NUM,ACCOUNT1)
   );
   ```
   
2. 创建全局索引 **CREATE INDEX TEST_TABLE_INDEX ON TEST_TABLE(ACCOUNT1,DATE,NUM,ACCOUNTDES,SEQ_NUM)**;
   
3. 插入数据 **UPSERT INTO TEST_TABLE (DATE,NUM,SEQ_NUM,ACCOUNT1,ACCOUNTDES,FLAG,SALL) values ('20201001',30201001,13,'367392332','sffa1','','');**
   
4. 执行BulkLoad任务更新数据 **hbase org.apache.phoenix.mapreduce.CsvBulkLoadTool -t TEST_TABLE -i /tmp/test.csv**，test.csv内容如下：
   ```
   20201001   30201001   13   367392332   sffa888   1231243   23
   ```
   
5. 问题现象：无法直接更新之前存在的索引数据，导致存在两条索引数据。
   ```
   +------------+-----------+-----------+---------------+----------------+
   | :ACCOUNT1  |   :DATE   |   :NUM    | 0:ACCOUNTDES  | :SEQ_NUM  |
   +------------+-----------+-----------+---------------+----------------+
   | 367392332  | 20201001  | 30201001  | sffa1          |  13                    |
   | 367392332  | 20201001  | 30201001  | sffa888       | 13                    |
   +------------+-----------+-----------+---------------+----------------+
   ```
   
**解决方法**
1. 删除旧的索引表。 
   **DROP INDEX TEST_TABLE_INDEX ON TEST_TABL** **E;**
   
   
2. 异步方式创建新的索引表。 
   **CREATE INDEX TEST_TABLE_INDEX ON TEST_TABLE(ACCOUNT1,DATE,NUM,ACCOUNTDES,SEQ_NUM) ASYNC;**
   
   
3. 索引重建。 
   **hbase org.apache.phoenix.mapreduce.index.IndexTool --data-table TEST_TABLE --index-table TEST_TABLE_INDEX --output-path /user/test_table**
   
   
 
