本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
一般情况下,轨迹数据都是以“追加”的方式写入到数据库中的。但在一些场景中,也会有删除时空对象的需求,Lindorm Ganos支持按时间段、按时空范围、按时空对象ID三种删除方式。
Lindorm Ganos支持使用HBase TTL技术来删除过期的数据,目前支持直接在HBase Shell中修改时空索引表的TTL属性来实现。如果建立了多个索引表,那么需要对每张索引表均执行该操作。
警告
删除索引表前请确保有数据备份,以免造成损失。
例如,现有时空索引表xxx_z3和属性索引表xxx_attr,对5分钟之前'd'列的数据进行删除,那么需要执行语句:
Alter 'xxx_z3',{NAME=>'d',TTL=>300}
Alter 'xxx_attr',{NAME=>'d',TTL=>300}
根据时空范围删除
根据时空范围删除的方式,可以删除z2/xz2、z3/xz3这两类时空索引表,无法删除其他索引表的信息。如果此时还存在属性索引表,那么有可能造成时空索引表和属性索引表之间数据的不一致。建议当只有时空索引表时使用该方式进行删除。
具体步骤
构造filter,通过filter可以筛选出删除的对象,这个filter和查询时候构造的filter机制是一样的。
使用geotools的SimpleFeatureStore.removerFeatures接口删除符合filter的对象。
/**
* 删除符合filter范围的数据
* @param schema :schema名称
* @param filterString :字符串描述的filter,需要符合ECQL语法
* @throws Exception
*/
public void removeByFilter(String schema, String filterString) throws Exception {
SimpleFeatureStore fs = (SimpleFeatureStore) ds.getFeatureSource(schema);
//如果filterString为空,表示全部删除
if (StringUtils.isEmpty(filterString)){
fs.removeFeatures(Filter.INCLUDE);
return;
}
Filter filterToDelete = ECQL.toFilter(filterString);
fs.removeFeatures(filterToDelete);
}
根据空间对象ID删除
根据空间对象ID删除的方式,将会删除ID索引表中的数据,无法删除其他索引表的信息。如果只有一个ID索引表,那么可以用该方式进行删除。
具体步骤:
使用geotools中的SimpleFeatureStore.removerFeatures接口删除指定的ID对象。
public void removeById(String schema,String simpleFeatureId) throws Exception{
//这里展示是通过FilterFactory2来构造filter
FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2;
Filter filterToDelete = ff.id(ff.featureId(simpleFeatureId));
SimpleFeatureStore fs = ds.getFeatureSource(schema);
fs.removeFeatures(filterToDelete);
}
文档内容是否对您有帮助?