How to delete data on Azure Cosmos DB SQL API is written in this blog.
▼1. Delete data on Azure Cosmos DB (SQL API)
Multiple Items in container on Azure Cosmos DB (SQL API) will be deleted using CosmosContainer.<T>deleteItem of Java.
▼2. Prerequisites
2-1. Free trial Cosmos DB account is available without subscription.
https://azure.microsoft.com/ja-jp/try/cosmosdb/
2-2. Enable Maven auto-import in IntelliJ IDEA on Ubuntu
Enable auto-import on IntelliJ IDEA No.13
2-3. Using Azure Cosmos DB Java SDK v4 4.8.0
Adding dependency of a Cosmos DB library in pom.xml
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-cosmos</artifactId>
<version>4.8.0</version>
</dependency>
Azure Cosmos DB Java SDK v4 for Core (SQL) API: release notes and resources
2-4. Creating Database and container
Java – Create Database on Azure Cosmos DB (SQL API) Database No.14
2-5. Creating data
Java – Create Database on Azure Cosmos DB (SQL API) Database No.14
In this case, I create the following data.
{"id": "1","lastName": "Travase","isRegistered": true}
{"id": "2","lastName": "Ken","isRegistered": true}
{"id": "3","lastName": "Satya","isRegistered": true}
▼3. Delete items on Cosmos DB (SQL API)
3-1. Deleting data using Java
These parameters should be updated to meet your environment.
- DatabaseName
- end_point
- master_key
- containerName
In this case, Ids are retrieved by a select query and then items are deleted according to ids in while method.
import com.azure.cosmos.*;
import com.azure.cosmos.models.CosmosItemRequestOptions;
import com.azure.cosmos.models.CosmosQueryRequestOptions;
import com.azure.cosmos.models.PartitionKey;
import com.azure.cosmos.util.CosmosPagedIterable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.stream.Collectors;
public class DeletCosmosDBv1 {
protected static final Logger log = LoggerFactory.getLogger(DeletCosmosDBv1.class);
public static class Family{
public String id;
public String lastName;
public boolean isRegistered;
public String getId(){
return id;
}
public String getLastName(){
return lastName;
}
public Family(String idv,String lastnamev,boolean isv) {
id = idv;
lastName = lastnamev;
isRegistered = isv;
}
public Family(){}
}
public static void main(String... args) {
String databaseName = "DatabaseName";
String end_point = "https://CosmosDBAccountName.documents.azure.com:443";
String master_key = "Key";
String containerName = "ColltionName";
try (CosmosClient cosmosClient = new CosmosClientBuilder().endpoint(end_point).key(master_key).directMode(DirectConnectionConfig.getDefaultConfig()).consistencyLevel(ConsistencyLevel.SESSION).connectionSharingAcrossClientsEnabled(true).contentResponseOnWriteEnabled(true).userAgentSuffix("ApplicationA").buildClient()){
log.info("The connection to Cosmos DB succeeded.");
CosmosDatabase database = cosmosClient.getDatabase(databaseName);
log.info("Set Container");
CosmosContainer container = database.getContainer(containerName);
log.info("Set some common query options");
CosmosQueryRequestOptions queryOptions = new CosmosQueryRequestOptions();
log.info("Set query metrics enabled to get metrics around query executions");
CosmosPagedIterable<Family> familiesPagedIterable = container.queryItems("select * from c",queryOptions,Family.class);
log.info("Read data");
familiesPagedIterable.iterableByPage(10).forEach(cosmosItemPropertiesFeedResponse ->
{
System.out.println("Got results " + cosmosItemPropertiesFeedResponse.getResults().size() + " items(s)");
System.out.println("Item Ids " + cosmosItemPropertiesFeedResponse
.getResults()
.stream()
.map(Family::getId)
.collect(Collectors.toList())
);
});
// delete all items
while(familiesPagedIterable.iterableByPage(10).iterator().hasNext()) {
if(familiesPagedIterable.iterator().hasNext()) {
Family families = familiesPagedIterable.iterator().next();
log.info("First query results: Family with (/id, partition key)= {} , {}", families.getId(), families.getLastName());
log.info("Delete this item.");
container.deleteItem(families.getId(), new PartitionKey(families.getLastName()), new CosmosItemRequestOptions());
}else{
log.info("no more items.");
break;
}
}
}catch(CosmosException e){
e.printStackTrace();
System.err.println(String.format("Read Item failed with %s",e));
}
}
}
3-2. A part of output of executing the code
[main] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Initializing DocumentClient [0] with serviceEndpoint [https://CosmosDBAccountName.documents.azure.com:443], connectionPolicy [ConnectionPolicy{requestTimeout=PT5S, connectionMode=DIRECT, maxConnectionPoolSize=1000, idleHttpConnectionTimeout=null, idleTcpConnectionTimeout=PT0S, userAgentSuffix='ApplicationA', throttlingRetryOptions=RetryOptions{maxRetryAttemptsOnThrottledRequests=9, maxRetryWaitTime=PT30S}, endpointDiscoveryEnabled=true, preferredRegions=null, multipleWriteRegionsEnabled=true, proxyType=null, inetSocketProxyAddress=null, readRequestsFallbackEnabled=true, connectTimeout=PT5S, idleTcpEndpointTimeout=PT1H, maxConnectionsPerEndpoint=130, maxRequestsPerConnection=30, tcpConnectionEndpointRediscoveryEnabled=false}], consistencyLevel [Session], directModeProtocol [Tcp]
[main] INFO com.azure.cosmos.implementation.http.SharedGatewayHttpClient - creating a new shared HttpClient
[parallel-1] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Getting database account endpoint from https://CosmosDBAccountName.documents.azure.com:443
[main] INFO com.azure.cosmos.implementation.directconnectivity.SharedTransportClient - creating a new shared RntbdTransportClient
[main] INFO com.azure.cosmos.implementation.directconnectivity.RntbdTransportClient - Using default Direct TCP options: azure.cosmos.directTcp.defaultOptions
[main] INFO com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdServiceEndpoint$RntbdEndpointMonitoringProvider - Starting RntbdClientChannelPoolMonitoringProvider ...
[main] INFO DeletCosmosDBv1 - The connection to Cosmos DB succeeded.
[main] INFO DeletCosmosDBv1 - Set Container
[main] INFO DeletCosmosDBv1 - Set some common query options
[main] INFO DeletCosmosDBv1 - Set query metrics enabled to get metrics around query executions
[main] INFO DeletCosmosDBv1 - Read data
[cosmos-rntbd-nio-2-1] INFO com.azure.cosmos.implementation.SessionContainer - Registering a new collection resourceId [xxxxx] in SessionTokens
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.fasterxml.jackson.module.afterburner.util.MyClassLoader (file:/home/UserA/.m2/repository/com/fasterxml/jackson/module/jackson-module-afterburner/2.11.2/jackson-module-afterburner-2.11.2.jar) to method java.lang.ClassLoader.findLoadedClass(java.lang.String)
WARNING: Please consider reporting this to the maintainers of com.fasterxml.jackson.module.afterburner.util.MyClassLoader
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Got results 3 items(s)
Item Ids [1, 2, 3]
[main] INFO DeletCosmosDBv1 - First query results: Family with (/id, partition key)= 1 , Travase
[main] INFO DeletCosmosDBv1 - Delete this item.
[main] INFO DeletCosmosDBv1 - First query results: Family with (/id, partition key)= 2 , Ken
[main] INFO DeletCosmosDBv1 - Delete this item.
[main] INFO DeletCosmosDBv1 - First query results: Family with (/id, partition key)= 3 , Satya
[main] INFO DeletCosmosDBv1 - Delete this item.
[main] INFO DeletCosmosDBv1 - no more items.
[main] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Attempting to close client 0
[main] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Shutting down ...
[main] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Closing Global Endpoint Manager ...
[main] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Closing StoreClientFactory ...
[main] INFO com.azure.cosmos.implementation.directconnectivity.SharedTransportClient - closing one reference to the shared RntbdTransportClient, the number of remaining references is 0
[main] INFO com.azure.cosmos.implementation.directconnectivity.SharedTransportClient - All references to shared RntbdTransportClient are closed. Closing the underlying RntbdTransportClient
[main] INFO com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdServiceEndpoint$RntbdEndpointMonitoringProvider - Shutting down RntbdClientChannelPoolMonitoringProvider ...
[main] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Shutting down reactorHttpClient ...
[main] INFO com.azure.cosmos.implementation.http.SharedGatewayHttpClient - closing one reference to the shared HttpClient, the number of remaining references is 0
[main] INFO com.azure.cosmos.implementation.http.SharedGatewayHttpClient - All references to shared HttpClient are closed. Closing the underlying HttpClient
[main] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Shutting down CpuMonitor ...
[main] INFO com.azure.cosmos.implementation.RxDocumentClientImpl - Shutting down completed.
▼4. Reference
(1) Azure Cosmos DB free trial account https://docs.microsoft.com/ja-jp/azure/cosmos-db/optimize-dev-test#try-azure-cosmos-db-for-free
(2) delete items https://github.com/Azure-Samples/azure-cosmos-java-sql-api-samples/blob/master/src/main/java/com/azure/cosmos/examples/documentcrud/sync/DocumentCRUDQuickstart.java#L303-L310
(3) CosmosContainer.<T>deleteItem Method https://docs.microsoft.com/en-us/java/api/com.azure.cosmos.cosmoscontainer.deleteitem?view=azure-java-stable
(4) CosmosPagedIterable<T> Class https://docs.microsoft.com/en-us/java/api/com.azure.cosmos.util.cosmospagediterable?view=azure-java-stable
That’s all. Have a nice day ahead !!!