准备数据
建表语句:
CREATE TABLE HAO1 ( id char(36) not null primary key, name varchar(50), age INTEGER, createtime DATE)
插入数据:
upsert into HAO1 ( id, name , age, createtime ) values('1', 'zhangsan',15,TO_DATE('2021-01-23 09:00:02'))
upsert into HAO1 ( id, name , age, createtime ) values('2', 'lisi',22,TO_DATE('2021-01-23 09:11:02'))
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来创建索引:
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机器上
${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 发现成功之后没有结果,不知道是不是配置错了,有时间我看看是什么原因.
然后就可以等待任务的结束,就能发现这个用异步创建的索引就有数据了.