es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo utilizar RowCounter en Apache HBase a través de la API de Spring Boot?

La tabla de HBase tiene una columna Id. Quiero comprobar si existe, si no existe, el controlador llama al método add(), si existe, entonces el controlador llama al método update(). El valor del Id se inyecta desde la clase Controller a la clase de servicio. ¿Cómo puedo contar el número de filas o comprobar si el Id existe?

Además, mi modelo tiene create_at y update_at, ¿cómo puedo actualizar sin actualizar la columna create_at? create_at se genera una vez cuando se llama a add(), update_at almacena la última hora de actualización.

java
record.setCreateAt(Timestamp.valueOf(LocalDateTime.now()));
record.setUpdateAt(Timestamp.valueOf(LocalDateTime.now()));

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para verificar si un ID en particular existe en una tabla HBase, puedes usar el método exists de la clase Table en la API de HBase. Aquí hay un ejemplo:

    public void checkIdExists(String id) throws Exception{
        Configuration config = HBaseConfiguration.create();
        Connection connection = ConnectionFactory.createConnection(config);
        Table table = connection.getTable(TableName.valueOf("<nombre_tabla>"));
        Get get = new Get(Bytes.toBytes(id));
        boolean exists = table.exists(get);
        if (exists) {
          update(id);
        } else {
          add(id);
        }
    }
    

    Para contar el número de filas en una tabla HBase, puedes usar el método count de la clase Table. Aquí hay un ejemplo:

    public long countRows() throws Exception {
        Configuration config = HBaseConfiguration.create();
        Connection connection = ConnectionFactory.createConnection(config);
        Table table = connection.getTable(TableName.valueOf("<nombre_tabla>"));
        Scan scan = new Scan();
        ResultScanner scanner = table.getScanner(scan);
        long count = 0;
        for (Result result : scanner) {
          count++;
        }
        scanner.close();
        return count;
    }
    

    Para actualizar la columna update_at sin actualizar la columna create_at, simplemente debes establecer la columna create_at en el valor original. Aquí hay un ejemplo:

    java
    public void updateRecord(String id) throws Exception {
    Configuration config = HBaseConfiguration.create();
    Connection connection = ConnectionFactory.createConnection(config);
    Table table = connection.getTable(TableName.valueOf("<nombre_tabla>"));
    Get get = new Get(Bytes.toBytes(id));
    Result result = table.get(get);
    byte[] createAtBytes = result.getValue(Bytes.toBytes("<familia_columnas>"), Bytes.toBytes("create_at"));
    Timestamp createAt = new Timestamp(createAtBytes);
    Put put = new Put(Bytes.toBytes(id));
    //se establecen otras columnas
    put.addColumn(Bytes.toBytes("<familia_columnas>"), Bytes.toBytes("create_at"), Bytes.toBytes(createAt.getTime()));
    put.addColumn(Bytes.toBytes("<familia_columnas>"), Bytes.toBytes("update_at"), Bytes.toBytes(System.currentTimeMillis()));
    table.put(put);
    }

Comments are closed.