一般的に、軌跡データはデータベースに継続的に追加されます。ただし、状況によっては時空間オブジェクトを削除する必要がある場合があります。この場合、Lindorm GanosBase を使用して、期間、時空間範囲、および時空間オブジェクト ID によって時空間オブジェクトを削除できます。
Lindorm GanosBase では、ApsaraDB for HBase の Time to Live(TTL)機能に基づいて期限切れのデータを削除できます。 HBase Shell を使用して時空間インデックステーブルの TTL 属性を変更し、期限切れのデータを削除できます。複数のインデックステーブルを作成する場合は、各インデックステーブルの TTL 属性を変更する必要があります。
インデックステーブルを削除する前に、テーブル内のデータがバックアップされていることを確認してください。
たとえば、xxx_z3 という名前の時空間インデックステーブルと xxx_attr という名前の属性インデックステーブルが作成されており、d 列の現在の時刻の 5 分前に生成されたデータを削除する場合、次のステートメントを実行して 2 つのテーブルの TTL を変更する必要があります。
Alter 'xxx_z3',{NAME=>'d',TTL=>300}
Alter 'xxx_attr',{NAME=>'d',TTL=>300}
指定された時空間範囲に基づいて時空間オブジェクトを削除する
z2/xz2 および z3/xz3 時空間インデックステーブルは、時空間範囲に基づいて削除できます。他のインデックステーブルはこの方法では削除できません。データベースに属性インデックステーブルが存在する場合、時空間インデックステーブルのデータは属性インデックステーブルのデータと一致しない可能性があります。データベースに時空間インデックステーブルのみが含まれている場合は、時空間範囲に基づいて時空間オブジェクトを削除することをお勧めします。
手順
削除するオブジェクトをフィルタリングするためのフィルターを設定します。このフィルターは、クエリに使用されるフィルターと同じ方法で設定されます。
GeoTools によって提供される SimpleFeatureStore.removerFeatures メソッドを使用して、フィルターをトリガーするオブジェクトを削除します。
/**
* フィルターをトリガーするデータを削除します。
* @param schema: スキーマ名。
* @param filterString: フィルター文字列。文字列は Extended Common Query Language(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 インデックステーブルが 1 つだけ作成されている場合は、この方法を使用して時空間オブジェクトを削除できます。
手順
GeoTools によって提供される SimpleFeatureStore.removerFeatures メソッドを使用して、指定された ID と一致するオブジェクトを削除します。
public void removeById(String schema,String simpleFeatureId) throws Exception{
// この例では、フィルターは FilterFactory2 を使用して設定されています。
FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2;
Filter filterToDelete = ff.id(ff.featureId(simpleFeatureId));
SimpleFeatureStore fs = ds.getFeatureSource(schema);
fs.removeFeatures(filterToDelete);
}