一般情況下,軌跡資料都是以“追加”的方式寫入到資料庫中的。但在一些情境中,也會有刪除時Null 物件的需求,Lindorm GanosBase支援按時間段、按時空範圍、按時Null 物件ID三種刪除方式。
Lindorm GanosBase支援使用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);
}