删除时空对象
删除时空对象
在大部分场景中,时空对象会以「追加」的方式不断写入到数据库中,比如车辆轨迹,每隔数秒钟就会写入一条轨迹数据。但在一些特殊的场景中,也会有删除时空对象的需求,比如:
- ETL场景中,写入到数据库中的数据会被清洗融合,因此有些数据会被删除掉
- 因为某些原因数据录入错误,这些数据也会被删除掉
HBase Ganos支持删除指定的时空对象,其机制是通过SimpleFeature的FID来确定要删除的时空对象。注:FID可理解为时空对象的唯一标识,不能重复。
示例
下面展示的是利用GeoTools的接口来删除指定id的某一时空对象,具体可参考「快速入门」代码示例。
- 该函数入参中,simpleFeatureId为写入数据时的ID,建议使用有意义的且能保证唯一性的编码,如objectId+timeStamp,这样后续删除时可以直接构造FID
- 构造FeatureWriter,同时指定要修改的FID,事务类型可以设置为AUTO_COMMIT
- 利用FeatureWriter的remove函数来删除掉
- 关闭FeatureWriter
public void removeById(String schema,String simpleFeatureId) throws Exception{
FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2();
FeatureWriter<SimpleFeatureType, SimpleFeature> writer =
ds.getFeatureWriter(schema, ff.id(ff.featureId(simpleFeatureId)), Transaction.AUTO_COMMIT);
while (writer.hasNext()) {
writer.next();
writer.remove();
}
writer.close();
}
注意事项
- 目前只支持根据FID来删除时空对象
需要提前启动id索引。若出现无法删除的情况,请检查id索引是否被禁用,参考「创建索引表」
程序中若出现如下代码,需要删除掉
sft.getUserData().put(“geomesa.disable.id.index”, true);
或者指定创建id索引
sft.getUserData().put("geomesa.indices.enabled", "id:object_id");
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论