一、表结构简介
Havenask的表结构由schema文件进行配置,主要包括字段配置和索引配置。
1、Schema配置
字段类型: https://havenask.net/#/doc/v1-1-0/sql/indexes/field-type
- INT8,UINT8,INT16,UINT16,INT32,UINT32,INT64,UINT64,FLOAT,DOUBLE,STRING,TEXT,RAW
索引类型: https://havenask.net/#/doc/sql/indexes/intro
- 倒排索引:NUMBER, STRING, TEXT, PACK, EXPACK, SPATIAL, RANGE, DATE, PRIMARYKEY64/PRIMARYKEY128
- 正排索引:ATTRIBUTE
- 摘要: SUMMARY
2、变更表结构
- 全量表:变更后触发全量,构建完成后自动切换(v1.1.0开始支持)
- 直写表:暂不支持直接变更表结构
- 字段类型包括整型、浮点型、字符串、文本和RAW类型等。索引则包括三类,分别是倒排索引、正排索引和摘要索引。当前版本支持全量表变更表结构,然后触发全量build,构建完成后自动切换。需要注意的是,直写表暂不支持直接变更表结构,还需重新建表。
二、全量构建流程
用户通过Hape向Catalog中提交表相关信息,BS从Catalog中获取变更的表信息并触发全量build,构建完成后,将状态写回Catalog suez admin。从Catalog中获取最新build好的索引版本信息,生成target,逐级下发到searcher。然后searcher进行索引切换,完成一次全量表的索引构建和切换的过程。
全量表构建和切换的流程如下图所示:
三、变更表结构
1、过程概述
有关hape命令变更表结构的详细介绍可参考havenask官网文档中的详细解释(链接:https://havenask.net/#/doc/sql/petool/command)。
首先,准备集群创建全量表;然后,查询变更前的表结构;接下来,变更表结构,如添加一个字段,全量构建完成后切换上线;最后,查询表结构变更之后的表内容。
2、全量表变更过程演示
准备集群:
- hape start havenask
- hape create table -t in0 -p 1 -s /ha3_install/example/cases/normal/in0_schema.json -f /ha3_install/example/cases/normal/test.data
- hape gs table/hape gs bs
查询:
- /ha3_install/sql_query.py --query "select * from in0"
变更表结构:
- hape update table-schema -t in0 -p 1 -s /ha3_install/example/cases/normal/in0_schema2.json -f /ha3_install/example/cases/normal/test2.data
- hape gs table/hape gs bs
查询:
- /ha3_install/sql_query.py --query "select * from in0"
3、具体步骤
- 首先,创建一个havenask运行容器,容器名为havenask_schema_test,进入运行容器。进入容器后,拉起一个havenask集群,接下来,创建一张全量表,其相关命令可以参考链接(https://developer.aliyun.com/article/1495436?groupCode=havenask),将表名改为in0。在创建全量表期间,我们可以通过havenask gs bs命令查看当前的build service状态,可以看到buildInfo以及build service任务的状态。一段时间后,可以用hape gs bs命令查看全量构建状态,可以看到带有full关键字的任务均已经处理完成,并且buildInfo中也产生了当前版本的信息,这说明全量已经构建好完成。
- 查询query可以看到查询正常,且当前schema有一个hits字段。然后,更改schema,触发全量build。最后,在索引切换上线之后查询其是否生效。创建一个用于测试的目录,该目录需要被havenask容器访问,因此可以在home目录。
因为havenask默认挂载了home目录,目录名称为test_data。将ha3_install目录下example当中的schema以及测试数据拷贝到这个目录,可以添加写入数据的权限,确保可以修改。
- 首先,修改schema,可以增加一个hits2字段保存;然后,修改全量的数据,将hits2改为hits的10倍,把hits的其中一篇doc也改成123;接下来,更新schema,相关的hape命令与建表非常类似,只需要把create table 改成update table-schema即可,并将schema路径改为修改后的schema文件,将测试数据也改成修改后的测试数据文件,详细的命令可以参考hape命令中update的更新全量表schema;更新schema后,会触发新的一轮全量build,可以通过hape gs bs查看新版本的全量build状态,可以看到新版本的全量状态 current当中有了版本的信息,这表示该全量已经构建完成。
- 再次查询,可以看到新增的hits2和修改的数据均已生效。
四、结尾
具体Havenask变更表结构的演示视频可以通过链接查看,欢迎各位开发者使用。
关注我们:
Havenask 开源官网:https://havenask.net/
Havenask-Github 开源项目地址:https://github.com/alibaba/havenask
阿里云 OpenSearch 官网:https://www.aliyun.com/product/opensearch
钉钉扫码加入 Havenask 开源官方技术交流群: