Ejemplo de consulta HBase: comandos put(), get() y scan()

⚡ Resumen inteligente

HBase put, get y scan son los comandos principales para escribir y leer datos, lo que le permite almacenar el valor de una celda por fila y columna, obtener una sola fila o explorar muchas filas desde el shell o Java API.

  • ✍️ Escribe con put: El comando put almacena un valor en una tabla, fila, columna y marca de tiempo opcional.
  • 🔍 Lee con obtener: El comando get devuelve una sola fila o celda, con las opciones TIMERANGE, VERSIONS y FILTERS.
  • 📜 Navegar con escaneo: El comando scan muestra una lista de muchas filas y los valores de sus columnas en una tabla.
  • Java API: Las mismas operaciones se ejecutan en Java utilizando Put, Get, Scan y la clase auxiliar Bytes.
  • 🧬 Coordenadas Cada valor se identifica mediante la clave de fila, la familia de columnas y el calificador de columna.
  • 🤖 Asistencia de IA: Los asistentes de IA redactan código para operaciones de inserción, obtención y escaneo, y sugieren diseños eficientes de claves de fila.

Comandos de consulta put(), get() y scan() de HBase en shell y Java

Escribir datos en la tabla HBase: Shell

Estos ejemplos asumen que HBase es instalado y en funcionamiento, el shell de HBase está abierto y un tabla llamada guru99 ya existe con la columna de educación y proyectos para familias.

El comando `put` se utiliza para almacenar datos en una tabla.

Syntax:  put <'tablename'>,<'rowname'>,<'columnvalue'>,<'value'>

Este comando se utiliza para lo siguiente:

  • Pondrá un "valor" de celda en una tabla, fila o columna definida o especificada.
  • Opcionalmente, coordinará una marca de tiempo.

Por ejemplo, aquí estamos colocando valores en la tabla “guru99” bajo la fila r1 y la columna c1:

hbase> put 'guru99', 'r1', 'c1', 'value', 10

Hemos introducido tres valores, 10, 15 y 30, en la tabla “guru99”, como se muestra en la captura de pantalla a continuación.

Comando put de la consola de HBase que inserta los valores 10, 15 y 30 en la tabla guru99.

Supongamos que la tabla “guru99” tiene una referencia a la tabla, como por ejemplo g. También puede ejecutar el comando en la referencia a la tabla, de esta manera:

hbase> g.put 'guru99', 'r1', 'c1', 'value', 10

El resultado aparece como se muestra en la captura de pantalla anterior después de introducir valores en “guru99”.

Leer datos de la tabla HBase: Shell

En esta sección, verificamos lo siguiente en el Caparazón HBase:

  • Valores que se insertan en la tabla HBase “guru99”.
  • Nombres de las columnas con los valores presentes en la tabla guru99 de HBase.

El resultado del escaneo que se muestra a continuación enumera todos los valores insertados en "guru99", junto con los nombres de sus filas y columnas:

Salida del comando de escaneo de la consola de HBase que lista las filas y los valores de las columnas en la tabla guru99.

A partir de la captura de pantalla anterior, podemos inferir lo siguiente:

  • Si ejecutamos el comando “scan” en la consola de HBase, mostrará los valores insertados en “guru99” de la siguiente manera.
  • En la consola de HBase, se mostrarán los valores insertados por nuestro código, junto con los nombres de las columnas y las filas.
  • Aquí podemos ver que los nombres de las columnas insertadas son “educación” y “proyectos”.
  • Los valores insertados en las columnas mencionadas son “BigData” y “HBase Tutorials”.

También puedes usar el comando get para leer datos de una tabla.

Syntax: get <'tablename'>, <'rowname'>, {< Additional parameters>}

Aquí, los parámetros adicionales incluyen TIMERANGE, TIMESTAMP, VERSIONS y FILTERS. Mediante este comando, se obtiene una fila o el contenido de una celda de la tabla. Se pueden agregar parámetros adicionales, como TIMESTAMP, TIMERANGE, VERSIONS o FILTERS, para obtener una fila o el contenido de una celda específica. La siguiente tabla resume estos parámetros:

Parámetro Propósito
INTERVALO DE TIEMPO Devuelve las celdas cuya marca de tiempo se encuentra dentro de un rango de tiempo de inicio y fin.
TIMESTAMP Devuelve únicamente la versión de la celda almacenada en una marca de tiempo exacta.
VERSIONES Establece cuántas versiones de una celda se deben devolver (el valor predeterminado es 1).
FILTROS Aplica un filtro para restringir las filas o columnas que se devuelven.
COLUMNA Limita el resultado a familias de columnas o calificadores específicos.

Aquí hay algunos ejemplos prácticos del comando get:

hbase> get 'guru99', 'r1', {COLUMN => 'c1'}

Para la tabla “guru99”, los valores de la fila r1 y la columna c1 se mostrarán utilizando este comando, como se muestra en la captura de pantalla a continuación.

El comando get de la consola de HBase devuelve una sola fila, r1, de la tabla guru99.

hbase> get 'guru99', 'r1'

Para la tabla “guru99”, los valores de la fila r1 se mostrarán usando este comando.

hbase> get 'guru99', 'r1', {TIMERANGE => [ts1, ts2]}

Para la tabla “guru99”, los valores de la fila r1 en el rango de tiempo ts1 a ts2 se mostrarán usando este comando.

hbase> get 'guru99', 'r1', {COLUMN => ['c1', 'c2', 'c3']}

Para la tabla “guru99”, los valores de la fila r1 y las familias de columnas c1, c2 y c3 se mostrarán utilizando este comando.

Escribir datos en la tabla HBase: API JAVA

En este paso, vamos a escribir datos en la tabla "guru99" de HBase.

Primero, debemos escribir código para insertar y recuperar valores de HBase, utilizando el programa HBaseLoading.java. Para crear e insertar valores en una tabla a nivel de columna, se utiliza el código que se muestra a continuación.

La captura de pantalla a continuación muestra la Java Código que crea la configuración de HBase e inserta valores en “guru99”:

Java Código que crea una configuración de HBase e inserta valores con la API Put.

Según la captura de pantalla anterior:

  • Cuando creamos la configuración de HBase, esta apunta a las configuraciones que establecimos en los archivos hbase-site.xml y hbase-default.xml durante la instalación de HBase.
  • Creación de la tabla “guru99” utilizando el método HTable.
  • Añadiendo la fila 1 a la tabla “guru99”.
  • Especificar los nombres de columna “educación” y “proyectos” e insertar valores en los nombres de columna en la fila 1 correspondiente. Los valores insertados aquí son: bigdata y “HBaseTutorials”.

Leer datos de la tabla HBase: Java API

Independientemente de los valores que hayamos introducido en la tabla de HBase en la sección anterior, aquí vamos a recuperarlos y mostrarlos.

La siguiente salida de consola muestra los datos que se leen de la tabla "guru99" de HBase:

Java Salida de la consola leyendo los valores de las columnas de educación y proyectos de la tabla guru99 de HBase.

Para recuperar los resultados almacenados en “guru99”:

  • Aquí vamos a obtener los valores que están almacenados en las familias de columnas, es decir, "educación" y "proyectos".
  • Utilizando el comando “get”, vamos a recuperar los valores almacenados en la tabla de HBase.
  • Resultados del escaneo mediante el comando “scan”. Los valores almacenados en la fila 1 se mostrarán en la consola.

Una vez escrito el código, lo ejecutas. Java Postulación Me gusta esto:

Haga clic con el botón derecho en HBaseLoading.java -> Ejecutar como -> Java Solicitud.

Tras ejecutar “HBaseLoading.java”, los valores se insertan en “guru99” en cada columna de HBase, y en el mismo programa también se pueden recuperar los valores.

Aquí está el código completo:

import java.io.IOException;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;
public class HBaseLoading
{
public static void main(String[] args) throws IOException
{
/* When you create a HBaseConfiguration, it reads in whatever you've set into your hbase-site.xml and in hbase-default.xml, as long as these can be found on the CLASSPATH*/

org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create();

/*This instantiates an HTable object that connects you to the "test" table*/

HTable table = new HTable(config, "guru99");

/* To add to a row, use Put. A Put constructor takes the name of the row you want to insert into as a byte array.*/

Put p = new Put(Bytes.toBytes("row1"));

/*To set the value you'd like to update in the row 'row1', specify the column family, column qualifier, and value of the table cell you'd like to update. The column family must already exist in your table schema. The qualifier can be anything.*/

p.add(Bytes.toBytes("education"), Bytes.toBytes("col1"),Bytes.toBytes("BigData"));
p.add(Bytes.toBytes("projects"),Bytes.toBytes("col2"),Bytes.toBytes("HBaseTutorials"));

// Once you've adorned your Put instance with all the updates you want to make, to commit it do the following

table.put(p);

// Now, to retrieve the data we just wrote.

Get g = new Get(Bytes.toBytes("row1"));
Result r = table.get(g);

byte [] value = r.getValue(Bytes.toBytes("education"),Bytes.toBytes("col1"));
byte [] value1 = r.getValue(Bytes.toBytes("projects"),Bytes.toBytes("col2"));
String valueStr = Bytes.toString(value);

String valueStr1 = Bytes.toString(value1);
System.out.println("GET: " +"education: "+ valueStr+"projects: "+valueStr1);

Scan s = new Scan();

s.addColumn(Bytes.toBytes("education"), Bytes.toBytes("col1"));
s.addColumn(Bytes.toBytes("projects"), Bytes.toBytes("col2"));
ResultScanner scanner = table.getScanner(s);
try
{
for (Result rr = scanner.next(); rr != null; rr = scanner.next())
{
System.out.println("Found row : " + rr);
}
} finally
{
// Make sure you close your scanners when you are done!

scanner.close();
}
}
}

Nota sobre las versiones de la API: El ejemplo anterior utiliza la clase HTable y su método add(), que reflejan la API de cliente de HBase anterior. Desde HBase 1.0, HTable está obsoleto. El código moderno obtiene una tabla mediante ConnectionFactory.createConnection(…).getTable(…) y crea una operación Put con addColumn() en lugar de add(). La lógica de put, get y scan permanece sin cambios.

Preguntas Frecuentes

El comando `get` recupera una fila por su clave y devuelve el resultado rápidamente. El comando `scan` lee varias filas secuencialmente en una tabla o un rango de claves, con la opción de filtrarlas por columnas o por fecha. Utilice `get` para búsquedas individuales y `scan` para explorar o exportar varias filas.

Una familia de columnas es un grupo con nombre de columnas que se almacenan juntas y se definen al crear la tabla. Un calificador de columna es el nombre de la columna individual dentro de esa familia, como por ejemplo education:col1. Las familias deben existir en el esquema; los calificadores se pueden agregar libremente al escribir los datos.

Utilice el comando delete para eliminar una celda; por ejemplo, delete 'guru99', 'r1', 'c1'. Utilice deleteall para eliminar una fila completa: deleteall 'guru99', 'r1'. Para vaciar una tabla por completo, desactívela y, a continuación, ejecute truncate 'guru99', que la elimina y la vuelve a crear.

HBase conserva varias versiones con marca de tiempo de cada celda. El número de versiones conservadas se establece por familia de columnas mediante el atributo VERSIONS, cuyo valor predeterminado es 1. Añada {VERSIONS => 3} a una consulta GET o SCARK para obtener varias versiones, o un TIMESTAMP para obtener una versión exacta.

Ejecuta `list` para ver todas las tablas en HBase. Ejecuta `count 'guru99'` para contar las filas en una tabla, opcionalmente con un intervalo para el progreso. Usa `describe 'guru99'` para ver las familias de columnas y `status 'simple'` para comprobar el estado del clúster.

HBase no tiene SQL nativo, pero Apache Phoenix añade una capa SQL que compila las consultas en operaciones nativas de inserción, obtención y escaneo. Admite la sintaxis familiar de SELECT, UPSERT y JOIN, lo que facilita las consultas en HBase para equipos que ya dominan SQL.

Los asistentes de codificación de IA y los grandes modelos de lenguaje pueden redactar comandos de shell de HBase y Java El código del cliente, a partir de una solicitud en lenguaje sencillo, sugiere diseños de claves de fila y explica los filtros de escaneo. El aprendizaje automático también ayuda a optimizar el rendimiento prediciendo las regiones de mayor actividad, aunque un ingeniero debe verificar cada consulta generada.

Sí. Copiloto de GitHub puede generar fragmentos de HBase put, get y scan en Java o el shell a partir de un comentario breve, incluyendo llamadas a Bytes.toBytes y filtros Scan. RevRevise la salida para verificar el nombre correcto de la tabla, las familias de columnas y la API de tabla actual antes de ejecutarla.

Resumir este post con: