您在使用HBase Ganos时空引擎时,可能会遇到一些无法解决的问题,本文列举出部分问题和解决方法。

HBase Ganos能否支持地理围栏数据的存取

地理围栏数据本质上是“面”数据,属于GeoJson的标准数据类型,HBase Ganos完全支持,其存取方式同“点”、“线”数据一致。

{
  "features": [
    {
      "geometry": {
        "coordinates": [
          [0,0],
          [0,1],
          [1,1],
          [1,0],
          [0,0]
        ],
        "type": "Polygon"
      },
      "id": "polygon_feature",
      "properties": {
        "name": "shanghai"
      },
      "type": "Feature"
    }
  ],
  "type": "FeatureCollection"
}

如何设置ID

如果ID列作为索引,则需要保证ID的唯一性,建议设置为biz_id和timestamp组合。

采用何种时间格式并建立时间索引

在HBase Ganos中,时间数据是放在GeoJson的properties域中,其格式为:时间戳,毫秒级的时间戳为13位整型,如1542628013000字符描述的时间格式:如2018/11/19 19:46:53,或者带时区的2018/11/19T19:46:53Z下面示例中,properties域中的dtg字段为时间字段(具体名称可自定义),在创建索引时通过参数date=properties.dtg设置为时间建立索引,其中date是固定写法,properties.dtg为GeoJson中的时间字段。

{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [125.6, 10.1]
  },
  "properties": {
    "name": "Dinagat Islands",
    "dtg": 1536041936000,
    "id":  "1"
  }
}

通过时间查询,性能较慢的原因

  • 请检查是否为其建立索引。
  • 请检查数据查询条件的时间格式是否与数据写入时的时间格式相同。入库时时间字段为时间戳(整型,1542628013000),查询时时间格式为字符描述的(如2018/11/19 19:46:53),则时间索引无效。

如何进行数据的更新

基于HBase的特性,{row, column}相同时,只会返回最新版本的数据,可等同认为数据会覆盖。举例如下:依次插入数据1:a,b,c和1:a1,b1。则最终只会保存1:a1,b1,依次插入数据 1:a,b,c 和1:a1,b1,c1,d,e,f 。则最终只会保存1:a1,b1,c1,d,e,f。

如何依据高程信息进行查询

目前时空索引支持二维空间坐标和时间坐标,并不支持高程。可将高程信息放在属性中并为其建立索引。

REST接口中创建ds时注意的问题

在REST接口中,创建ds时,需要指定hbase catalog和zookeeper地址,而后面两个参数决定了数据的存放位置。因此可以将ds理解为是一个配置名称,通过这个配置名称可以找到hbase catalog和zookeeper,并非是普通数据库中的datasource含义。因此,如果hbase catalog和zookeeper地址不同,建议创建不同的ds。反之,尽量使用同一个ds。

有两个不同名称的ds,索引名称相同,为什么会查出来一样的数据?如上面所述,ds只是一个别名,真正起作用的是hbase catalog和zookeeper地址。如果两个不同名称的ds,指向的hbase catalog和zookeeper地址是同一个,在索引名相同的情况下,会共用一个索引,因此查出来的数据是一样的。