全部產品
Search
文件中心

Lindorm:刪除時Null 物件

更新時間:Apr 16, 2025

一般情況下,軌跡資料都是以“追加”的方式寫入到資料庫中的。但在一些情境中,也會有刪除時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);
}