Estoy tratando de implementar una función que dado un DynamoDB y el nombre de una tabla sé que existe en la base de datos, determina si esta tabla está vacía o no.
Espero que la firma se vea como la siguiente en Java:
public Boolean isEmpty(DynamoDB database, String tableName) = ???
Supongamos por los efectos de esta pregunta que la tabla tiene una clave principal que consta de un solo atributo de tipo entero llamado "identificación de usuario".
Soy consciente de que se puede utilizar una exploración para buscar en una mesa, pero yo (a) No se que la expresión se vería así, y (b) necesita que sea limitado a un solo elemento, de modo que nosotros no 't tiene que escanear toda la tabla (que puede ser grande) en el caso de que es no vacío.
EDITAR:
Debería quizá esté utilizando una AmazonDynamoDB
en mi constructor lugar, en vez de una DynamoDB
? El primero tiene un scan
método que toma un ScanRequest
- para los que se pueden crear fácilmente usando un límite .limit(1)
- mientras que para este último que haría algo así database.getTable(tableName).scan(...)
, pero esta exploración toma una ScanSpec
para la que no me queda claro cómo establecer un límite para.
En respuesta a mi propia pregunta, me encontré con lo siguiente: Diferencia entre las clases AmazonDynamoDBClient y DynamoDB en su SDK Java?
El DynamoDB
estaba tratando de uso es simplemente una envoltura alrededor AmazonDynamoDB
que proporciona una API ligeramente diferente. Utilizando el AmazonDynamoDB
lugar hace que la implementación de esta función mucho más fácil, y debe ser algo como esto (disculpen la mala código Java, en realidad estoy escribiendo esto en Scala):
public Boolean isEmpty(AmazonDynamoDB database, String tableName) = {
ScanRequest scanRequest = new ScanRequest().withTableName(tableName).withLimit(1);
return database.scan(scanRequest).getCount == 0;
}
O, en Scala:
def isEmpty(database: AmazonDynamoDB, tableName: String): Boolean = {
val scanRequest = new ScanRequest().withTableName(tableName).withLimit(1)
database.scan(scanRequest).getCount == 0
}