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"
  }
}
		

通过时间查询,性能较慢,可能是什么原因

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

如何进行数据的更新 基于HBase的特性,{row, column}相同时,只会返回最新一个version的数据,可等同认为数据会覆盖。举例如下: 依次插入数据 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地址是同一个,在索引名相同的情况下,会共用一个索引,因此查出来的数据是一样的。