全部产品
云市场

删除时空对象

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

删除时空对象

在大部分场景中,时空对象会以「追加」的方式不断写入到数据库中,比如车辆轨迹,每隔数秒钟就会写入一条轨迹数据。但在一些特殊的场景中,也会有删除时空对象的需求,比如:

  • ETL场景中,写入到数据库中的数据会被清洗融合,因此有些数据会被删除掉
  • 因为某些原因数据录入错误,这些数据也会被删除掉

HBase Ganos支持删除指定的时空对象,其机制是通过SimpleFeature的FID来确定要删除的时空对象。注:FID可理解为时空对象的唯一标识,不能重复。

示例

下面展示的是利用GeoTools的接口来删除指定id的某一时空对象,具体可参考「快速入门」代码示例。

  • 该函数入参中,simpleFeatureId为写入数据时的ID,建议使用有意义的且能保证唯一性的编码,如objectId+timeStamp,这样后续删除时可以直接构造FID
  • 构造FeatureWriter,同时指定要修改的FID,事务类型可以设置为AUTO_COMMIT
  • 利用FeatureWriter的remove函数来删除掉
  • 关闭FeatureWriter
    1. public void removeById(String schema,String simpleFeatureId) throws Exception{
    2. FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2();
    3. FeatureWriter<SimpleFeatureType, SimpleFeature> writer =
    4. ds.getFeatureWriter(schema, ff.id(ff.featureId(simpleFeatureId)), Transaction.AUTO_COMMIT);
    5. while (writer.hasNext()) {
    6. writer.next();
    7. writer.remove();
    8. }
    9. writer.close();
    10. }

注意事项

  • 目前只支持根据FID来删除时空对象
  • 需要提前启动id索引。若出现无法删除的情况,请检查id索引是否被禁用,参考「创建索引表」

    • 程序中若出现如下代码,需要删除掉

      sft.getUserData().put(“geomesa.disable.id.index”, true);

    • 或者指定创建id索引

      1. sft.getUserData().put("geomesa.indices.enabled", "id:object_id");