您在使用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地址是同一个,在索引名相同的情况下,会共用一个索引,因此查出来的数据是一样的。