Verwenden Sie die aggregierte Abfrage (Anzahl) mit dem Azure CosmosDB Java SDK

Ich bin süchtig danach, aggregierte Abfragen in CosmosDB aus dem JavaSDK zu verwenden, also werde ich das zur Kenntnis nehmen.

Wenn Sie die VALUE-Klausel in der Abfrage nicht festlegen, wird die folgende Fehlermeldung angezeigt:

java.lang.IllegalStateException: com.microsoft.azure.documentdb.DocumentClientException: Message: {"Errors":["Cross partition query only supports 'VALUE <AggreateFunc>' for aggregates."]}
Caused by: com.microsoft.azure.documentdb.DocumentClientException: Message: {"Errors":["Cross partition query only supports 'VALUE <AggreateFunc>' for aggregates."]}

Wenn setEnableCrossPartitionQuery nicht auf true gesetzt ist, tritt der folgende Fehler auf.

java.lang.IllegalStateException: com.microsoft.azure.documentdb.DocumentClientException: Cross partition query is required but disabled. Please set x-ms-documentdb-query-enablecrosspartition to true, specify x-ms-documentdb-partitionkey, or revise your query to avoid this exception.
Caused by: com.microsoft.azure.documentdb.DocumentClientException: Cross partition query is required but disabled. Please set x-ms-documentdb-query-enablecrosspartition to true, specify x-ms-documentdb-partitionkey, or revise your query to avoid this exception.

Unten ist der Java-Code.


		// Azure Cosmos DB Libraries for Java
		// https://docs.microsoft.com/ja-jp/java/api/overview/azure/cosmosdb?view=azure-java-stable

		String host = "yourhost";
		String container_id = "yourcontainer";
		String database = "yourdatabase";

		// Get key from Azure Web Console
		// read write key
		String key = "yourkey";

		String endPoint = "https://" + host + ".documents.azure.com:443";

		DocumentClient client = new DocumentClient(endPoint, key, //
				new ConnectionPolicy(), ConsistencyLevel.Session);

		String collectionLink = String.format("/dbs/%s/colls/%s", database, container_id);

		String q = String.format("SELECT VALUE count(1) FROM c");
		// IF (without 'VALUE' in query)
//		java.lang.IllegalStateException: com.microsoft.azure.documentdb.DocumentClientException: Message: {"Errors":["Cross partition query only supports 'VALUE <AggreateFunc>' for aggregates."]}
//		Caused by: com.microsoft.azure.documentdb.DocumentClientException: Message: {"Errors":["Cross partition query only supports 'VALUE <AggreateFunc>' for aggregates."]}

		FeedOptions feedOptions = new FeedOptions();
		feedOptions.setEnableCrossPartitionQuery(true);
		// IF (EnableCrossPartitionQuery = false)
//		java.lang.IllegalStateException: com.microsoft.azure.documentdb.DocumentClientException: Cross partition query is required but disabled. Please set x-ms-documentdb-query-enablecrosspartition to true, specify x-ms-documentdb-partitionkey, or revise your query to avoid this exception.
//		Caused by: com.microsoft.azure.documentdb.DocumentClientException: Cross partition query is required but disabled. Please set x-ms-documentdb-query-enablecrosspartition to true, specify x-ms-documentdb-partitionkey, or revise your query to avoid this exception.

		try {

			List<Object> results = client //
					.queryAggregateValues(collectionLink, q, feedOptions);

			System.err.println(results.get(0));

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			client.close();
		}


das ist alles.

Recommended Posts

Verwenden Sie die aggregierte Abfrage (Anzahl) mit dem Azure CosmosDB Java SDK
Verwenden Sie Azure Bing SpellCheck mit Java
Holen Sie sich Zeitstempel mit dem Azure BlobStorage Java SDK
Verwenden Sie Lambda-Ebenen mit Java
Verwenden Sie SpatiaLite mit Java / JDBC
Verwenden Sie Java mit MSYS und Cygwin
Verwenden Sie JDBC mit Java und Scala.
Verwenden Sie Java 11 mit Google Cloud-Funktionen
[JaCoCo (Java Code Coverage)] Verwendung mit NetBeans
[CircleCI 2.0] [Java] [Maven] [JUnit] Aggregieren Sie die JUnit-Testergebnisse mit CircleCI 2.0
Stellen Sie Java-Webanwendungen mit maven in Azure bereit
Verwendung des Java-Frameworks mit AWS Lambda! ??
Ich möchte Java8 für jeden mit Index verwenden
Blockinformationen erhalten Sie mit dem Java SDK von Hyperledger Iroha
Verwendung der Java-API mit Lambda-Ausdrücken
Verwenden Sie Matplotlib aus Java oder Scala mit Matplotlib4j
[JAVA] [Spring] [MyBatis] Verwenden Sie IN () mit SQL Builder
Wählen Sie * aus dem Java SDK in Azure Cosmos DB