Check out the examples below for common scenarios of deleting data from a collection.
Deleting data by datapoint IDs
Section titled “Deleting data by datapoint IDs”To delete data from a collection, use the delete method. This method accepts a list of datapoint IDs to delete.
from tilebox.datasets import Client
client = Client()datasets = client.datasets()collections = datasets.my_custom_dataset.collections()collection = collections["Sensor-1"]
n_deleted = collection.delete([ "0195c87a-49f6-5ffa-e3cb-92215d057ea6", "0195c87b-bd0e-3998-05cf-af6538f34957",])
print(f"Deleted {n_deleted} data points.")package main
import ( "context" "log" "log/slog"
"github.com/google/uuid" "github.com/tilebox/tilebox-go/datasets/v1")
func main() { ctx := context.Background()
client := datasets.NewClient()
dataset, err := client.Datasets.Get(ctx, "my_custom_dataset") if err != nil { log.Fatalf("Failed to get dataset: %v", err) }
collection, err := client.Collections.Get(ctx, dataset.ID, "Sensor-1") if err != nil { log.Fatalf("Failed to create collection: %v", err) }
datapointIDs := []uuid.UUID{ uuid.MustParse("0195c87a-49f6-5ffa-e3cb-92215d057ea6"), uuid.MustParse("0195c87b-bd0e-3998-05cf-af6538f34957"), } numDeleted, err := client.Datapoints.DeleteIDs(ctx, collection.ID, datapointIDs) if err != nil { log.Fatalf("Failed to delete datapoints: %v", err) } slog.Info("Deleted data points", slog.Int64("deleted", numDeleted))}Deleted 2 data points.Possible errors
Section titled “Possible errors”NotFoundError: raised if one of the data points is not found in the collection. If any of the data points are not found, nothing will be deletedValueError: raised if one of the specified ids is not a valid UUID
Deleting a time interval
Section titled “Deleting a time interval”One common way to delete all datapoints in a time interval is to first query it from a collection and then deleting those
found datapoints. For this use case it often is a good idea to query the datapoints with skip_data=True to avoid actually
loading the data fields, since only the datapoint IDs are required. See skipping data fields for more details.
to_delete = collection.query(temporal_extent=("2023-05-01", "2023-06-01"), skip_data=True)
n_deleted = collection.delete(to_delete)print(f"Deleted {n_deleted} data points.")datasetID := uuid.MustParse("25a6f262-f6eb-4de5-be4f-b021f4f7dd13")collectionID := uuid.MustParse("c5145c99-1843-4816-9221-970f9ce3ac93")startDate := time.Date(2023, time.May, 1, 0, 0, 0, 0, time.UTC)endDate := time.Date(2023, time.June, 1, 0, 0, 0, 0, time.UTC)mai2023 := query.NewTimeInterval(startDate, endDate)
var toDelete []*v1.Sentinel2Msierr := client.Datapoints.QueryInto(ctx, datasetID, &toDelete, datasets.WithCollectionIDs(collectionID), datasets.WithTemporalExtent(mai2023), datasets.WithSkipData(),)if err != nil { log.Fatalf("Failed to query datapoints: %v", err)}
numDeleted, err := client.Datapoints.Delete(ctx, collectionID, toDelete)if err != nil { log.Fatalf("Failed to delete datapoints: %v", err)}slog.Info("Deleted data points", slog.Int64("deleted", numDeleted))Deleted 104 data points.Automatic batching
Section titled “Automatic batching”Tilebox automatically batches the delete requests for you, so you don’t have to worry about the maximum request size.