全部产品
云市场

创建索引表

更新时间:2019-08-12 10:02:01

创建索引表

Ganos通过多个内置的空间索引机制对空间数据、时空数据进行索引,用户只需在前端输入时空数据,并指定要建立的索引即可,不用再关心HBase的KV如何设计与构建,使用较为方便。

因此,在数据写入之前,需要先定义好索引表结构。

索引类型

Ganos目前支持四类索引,适应于不同的查询查询场景。这些索引可以同时存在,也可以根据需求只创建某个索引(如业务场景中只有周边范围查询,那么就只需要创建Z2索引,而不用创建其他索引)。

ID索引(id):

适应于根据空间要素对象的FID查询场景,适应范围较少,几乎不用

Z2/XZ2索引(z2/xz2)

适应于空间查询,如地理围栏判断、周边范围查询等;其中Z2是用于「点」对象;XZ2用于「线」、「面」对象

Z3/XZ2索引(z3/xz3)

适应于时空查询,如某个空间范围以及时间段内的历史轨迹等;其中Z3是用于「点」对象;XZ3用于「线」、「面」对象

属性索引(attr)

适应于根据其他属性查询的场景

建立索引的步骤

建立索引过程中,主要包含两个步骤:

1、定义空间/时空数据类型,即SimpleFeatureType
  • 类型schema名称,可以认为是索引表的别名
  • schema具体内容,包含了属性,空间对象(Geometry)以及时间等列的定义
  • 其他自定义信息,包括:
    • 使用的hbase压缩方式
    • 是否使用TWKB格式
    • 对schema中的哪个列建立索引
      2、根据定义好的空间/时空数据类型创建具体的对象
      注:可参考「快速入门」代码示例中的Write类,该类已经对上述操作进行的封装,方便使用

如何创建指定的索引

如前所述,Ganos的索引可以同时存在,也可以根据需求只创建某个索引(如业务场景中只有周边范围查询,那么就只需要创建Z2索引,而不用创建其他索引)。默认情况下是建立所有的索引,这样对所有的查询场景来说都能提供较高的性能,但会占用较多的存储空间。为了节省空间存储,可以据查询场景选择合适的索引。
Ganos内置了特定的Hints,用来在定义SimpleFeatureType的时候指定对应的索引,语法如下:

  1. //sft为SimpleFeatureType的一个实例对象
  2. sft.getUserData().put("geomesa.indices.enabled", "{index_name}:{col1}:{col2}:...,{index_name}:{col}");
  • index_name取下面常量之一:id,attr,z2,z3,xz2,xz3
  • col为SimpleFeatureType中定义的列
  • 可以创建多个index,每个index之间用「,」分割;
  • 可以将多个列添加到同一个索引中,索引和每个列之间用「:」分割

下面这个示例中,一共创建了z3和attr两个索引,其中start列+dtg列为z3索引;end列+dtg列为z3索引;name列和dtg列为attr索引。

  1. sft.getUserData().put("geomesa.indices.enabled", "z3:start:dtg,z3:end:dtg,attr:name:dtg");