准备数据

建表语句:

  1. CREATE TABLE HAO1 ( id char(36) not null primary key, name varchar(50), age INTEGER, createtime DATE)

插入数据:

  1. upsert into HAO1 ( id, name , age, createtime ) values('1', 'zhangsan',15,TO_DATE('2021-01-23 09:00:02'))
  2. upsert into HAO1 ( id, name , age, createtime ) values('2', 'lisi',22,TO_DATE('2021-01-23 09:11:02'))
  3. upsert into HAO1 ( id, name , age, createtime ) values('3', 'wangwu',25,TO_DATE('2021-01-23 09:56:02'))

异步创建索引

一般我们可以使用CREATE INDEX来创建一个索引,这是一种同步的方法。但是有时候我们创建索引的表非常大,我们需要等很长时间。Phoenix 4.5以后有一个异步创建索引的方式,使用关键字ASYNC来创建索引:

  1. CREATE INDEX index3_async ON hao1 (age) INCLUDE(name) ASYNC

这时候创建的索引表中不会有数据。你还必须要单独的使用命令行工具来执行数据的创建。当语句给执行的时候,后端会启动一个map reduce任务,只有等到这个任务结束,数据都被生成在索引表中后,这个索引才能被使用。启动工具的方法:
语法:
${HBASE_HOME}/bin/hbase org.apache.phoenix.mapreduce.index.IndexTool
—schema MY_SCHEMA —data-table hao1 —index-table index3_async
—output-path /root/result

这个任务不会因为客户端给关闭而结束,是在后台运行。你可以在指定的文件ASYNC_IDX_HFILES中找到最终实行的结果。

开始执行数据的创建

在Shell机器上

  1. ${HBASE_HOME}/bin/hbase org.apache.phoenix.mapreduce.index.IndexTool --data-table HAO1 --index-table INDEX3_ASYNC --output-path /root/result

注意大小写,这里写小写不会转成大写,已经证实了.如果没有schema的话,就不用填写—schema 选项. 我这里output-path 发现成功之后没有结果,不知道是不是配置错了,有时间我看看是什么原因.

然后就可以等待任务的结束,就能发现这个用异步创建的索引就有数据了.
image.png