Exemplo de consulta HBase: comandos put(), get() e scan()

โšก Resumo Inteligente

Os comandos HBase put, get e scan sรฃo os principais para leitura e gravaรงรฃo de dados, permitindo armazenar o valor de uma cรฉlula por linha e coluna, buscar uma รบnica linha ou navegar por vรกrias linhas a partir do shell ou Java API.

  • โœ๏ธ Escreva com put: O comando put armazena um valor em uma tabela, linha, coluna e, opcionalmente, em um registro de data e hora.
  • ๐Ÿ” Leia com o comando get: O comando get retorna uma รบnica linha ou cรฉlula, com as opรงรตes TIMERANGE, VERSIONS e FILTERS.
  • ๐Ÿ“œ Navegar com o scanner: O comando scan lista vรกrias linhas e os valores de suas colunas em uma tabela.
  • โ˜• Java API: As mesmas operaรงรตes sรฃo executadas em Java Utilizando Put, Get, Scan e a classe auxiliar Bytes.
  • ๐Ÿงฌ Coordenadas: Cada valor รฉ identificado pela chave da linha, famรญlia da coluna e qualificador da coluna.
  • ๐Ÿค– Assistรชncia de IA: Assistentes de IA elaboram cรณdigos de inserรงรฃo, obtenรงรฃo e leitura, alรฉm de sugerirem designs eficientes para chaves de linha.

Os comandos de consulta put(), get() e scan() do HBase sรฃo executados no shell e Java

Gravar dados na tabela HBase: Shell

Esses exemplos pressupรตem que o HBase esteja instalado e funcionando, o shell do HBase estรก aberto e um tabela chamada guru99 jรก existe uma coluna com projetos e educaรงรฃo para famรญlias.

O comando put รฉ usado para armazenar dados em uma tabela.

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

Este comando รฉ usado para os seguintes fins:

  • Ele colocarรก um 'valor' de cรฉlula em uma tabela, linha ou coluna definida ou especificada.
  • Opcionalmente, poderรก incluir um registro de data e hora.

Por exemplo, aqui estamos inserindo valores na tabela โ€œguru99โ€ na linha r1 e coluna c1:

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

Inserimos trรชs valores, 10, 15 e 30, na tabela โ€œguru99โ€, conforme mostrado na captura de tela abaixo.

O comando `put` do shell do HBase inseriu os valores 10, 15 e 30 na tabela guru99.

Suponha que a tabela โ€œguru99โ€ tenha uma referรชncia de tabela, como g. Vocรช tambรฉm pode executar o comando na referรชncia da tabela, assim:

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

O resultado aparece conforme mostrado na captura de tela acima apรณs inserir valores em โ€œguru99โ€.

Ler dados da tabela HBase: Shell

Nesta seรงรฃo, verificamos o seguinte no Shell do HBase:

  • Valores que sรฃo inseridos na tabela HBase โ€œguru99โ€.
  • Nomes das colunas com os valores presentes na tabela HBase guru99.

A saรญda da anรกlise abaixo lista todos os valores inseridos em โ€œguru99โ€, juntamente com os nomes de suas linhas e colunas:

Saรญda do comando scan do shell do HBase listando as linhas e os valores das colunas na tabela guru99

A partir da captura de tela acima, podemos inferir o seguinte:

  • Se executarmos o comando โ€œscanโ€ no shell do HBase, ele exibirรก os valores inseridos em โ€œguru99โ€ da seguinte forma.
  • No shell do HBase, serรฃo exibidos os valores inseridos pelo nosso cรณdigo, juntamente com os nomes das colunas e linhas.
  • Aqui podemos ver que os nomes das colunas inseridos sรฃo โ€œeducaรงรฃoโ€ e โ€œprojetosโ€.
  • Os valores inseridos nas colunas mencionadas foram โ€œBigDataโ€ e โ€œTutoriais HBaseโ€.

Vocรช tambรฉm pode usar o comando get para ler dados de uma tabela.

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

Aqui, os parรขmetros adicionais incluem TIMERANGE, TIMESTAMP, VERSIONS e FILTERS. Usando este comando, vocรช obtรฉm uma linha ou o conteรบdo de uma cรฉlula presente na tabela. Vocรช pode adicionar parรขmetros adicionais, como TIMESTAMP, TIMERANGE, VERSIONS ou FILTERS, para buscar uma linha ou o conteรบdo de uma cรฉlula especรญfica. A tabela abaixo resume esses parรขmetros:

Parรขmetro Propรณsito
INTERVALO DE TEMPO Retorna as cรฉlulas cujo carimbo de data/hora estรก dentro de um intervalo de tempo inicial e final.
TIMESTAMP Retorna apenas a versรฃo da cรฉlula armazenada em um determinado momento.
VERSร•ES Define quantas versรตes de uma cรฉlula devem ser retornadas (o padrรฃo รฉ 1).
FILTROS Aplica um filtro para restringir quais linhas ou colunas sรฃo retornadas.
COLUNA Limita o resultado a famรญlias de colunas ou qualificadores especรญficos.

Aqui estรฃo alguns exemplos prรกticos do comando get:

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

Para a tabela โ€œguru99โ€, os valores da linha r1 e da coluna c1 serรฃo exibidos usando este comando, conforme mostrado na captura de tela abaixo.

O comando get do shell do HBase retorna uma รบnica linha, r1, da tabela guru99.

hbase> get 'guru99', 'r1'

Para a tabela โ€œguru99โ€, os valores da linha r1 serรฃo exibidos usando este comando.

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

Para a tabela โ€œguru99โ€, os valores da linha r1 no intervalo de tempo ts1 a ts2 serรฃo exibidos usando este comando.

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

Para a tabela โ€œguru99โ€, os valores da linha r1 e das famรญlias de colunas c1, c2 e c3 serรฃo exibidos usando este comando.

Gravar dados na tabela HBase: API JAVA

Nesta etapa, vamos gravar dados na tabela HBase โ€œguru99โ€.

Primeiro, precisamos escrever o cรณdigo para inserir e recuperar valores do HBase, usando o programa HBaseLoading.java. Para criar e inserir valores em uma tabela no nรญvel da coluna, o cรณdigo deve ser escrito conforme mostrado abaixo.

A captura de tela abaixo mostra o Java Cรณdigo que constrรณi a configuraรงรฃo do HBase e insere valores em โ€œguru99โ€:

Java Cรณdigo que cria uma configuraรงรฃo do HBase e insere valores com a API Put.

Conforme a captura de tela acima:

  • Ao criarmos a configuraรงรฃo do HBase, ela aponta para quaisquer configuraรงรตes que tenhamos definido nos arquivos hbase-site.xml e hbase-default.xml durante a instalaรงรฃo do HBase.
  • Criaรงรฃo da tabela โ€œguru99โ€ usando o mรฉtodo HTable.
  • Adicionando a linha 1 ร  tabela โ€œguru99โ€.
  • Especificando os nomes das colunas โ€œeducationโ€ e โ€œprojectsโ€ e inserindo valores nos nomes das colunas na respectiva linha1. Os valores inseridos aqui sรฃo BigData e โ€œTutoriais HBaseโ€.

Leia os dados da tabela HBase: Java API

Quaisquer valores que tenhamos inserido na tabela HBase na seรงรฃo anterior serรฃo recuperados e exibidos aqui.

A saรญda do console abaixo mostra os dados sendo lidos da tabela HBase โ€œguru99โ€:

Java Saรญda do console: leitura dos valores das colunas "education" e "projects" da tabela HBase guru99

Para recuperar resultados armazenados em โ€œguru99โ€:

  • Aqui, vamos buscar os valores armazenados nas famรญlias de colunas, ou seja, โ€œeducationโ€ e โ€œprojectsโ€.
  • Utilizando o comando โ€œgetโ€, vamos buscar os valores armazenados na tabela HBase.
  • Resultados da leitura usando o comando โ€œscanโ€. Os valores armazenados na linha 1 serรฃo exibidos no console.

Depois de escrever o cรณdigo, vocรช executa o Java Formulรกrio on line como isso:

Clique com o botรฃo direito do mouse em HBaseLoading.java -> Executar como -> Java Aplicaรงรฃo.

Apรณs executar o arquivo โ€œHBaseLoading.javaโ€, os valores sรฃo inseridos em โ€œguru99โ€ em cada coluna do HBase, e o mesmo programa tambรฉm pode recuperar os valores.

Aqui estรก o 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 as versรตes da API: O exemplo acima usa a classe HTable e seu mรฉtodo add(), que refletem a API de cliente HBase mais antiga. Desde o HBase 1.0, o HTable estรก obsoleto. O cรณdigo moderno obtรฉm uma tabela por meio de ConnectionFactory.createConnection(โ€ฆ).getTable(โ€ฆ) e constrรณi uma operaรงรฃo Put com addColumn() em vez de add(). A lรณgica de put, get e scan permanece a mesma.

Perguntas Frequentes

O comando `get` recupera uma linha pela sua chave e retorna o resultado rapidamente. O comando `scan` lรช vรกrias linhas sequencialmente em uma tabela ou em um intervalo de chaves, opcionalmente filtrado por colunas ou por tempo. Use `get` para pesquisas individuais e `scan` para navegar ou exportar vรกrias linhas.

Uma famรญlia de colunas รฉ um grupo nomeado de colunas armazenadas juntas e definidas quando vocรช cria a tabela. Um qualificador de coluna รฉ o nome da coluna individual dentro dessa famรญlia, como educaรงรฃo:col1. As famรญlias devem existir no esquema; os qualificadores podem ser adicionados livremente no momento da gravaรงรฃo.

Use o comando delete para remover uma cรฉlula, por exemplo, delete 'guru99', 'r1', 'c1'. Use deleteall para remover uma linha inteira: deleteall 'guru99', 'r1'. Para esvaziar completamente uma tabela, desabilite-a e execute truncate 'guru99', que a excluirรก e a recriarรก.

O HBase mantรฉm vรกrias versรตes com carimbo de data/hora de cada cรฉlula. O nรบmero de versรตes retidas รฉ definido por famรญlia de colunas pelo atributo VERSIONS, que por padrรฃo รฉ 1. Adicione {VERSIONS => 3} a uma consulta GET ou SCAN para retornar vรกrias versรตes, ou um TIMESTAMP para buscar uma versรฃo especรญfica.

Execute o comando `list` para visualizar todas as tabelas no HBase. Execute `count 'guru99'` para contar as linhas em uma tabela, opcionalmente com um INTERVALO para acompanhar o progresso. Use `describe 'guru99'` para visualizar as famรญlias de colunas e `status 'simple'` para verificar a integridade do cluster.

O HBase nรฃo possui SQL nativo, mas o Apache Phoenix adiciona uma camada SQL que compila consultas em operaรงรตes nativas de inserรงรฃo (put), obtenรงรฃo (get) e varredura (scan). Ele oferece suporte ร  sintaxe familiar de SELECT, UPSERT e JOIN, tornando o HBase mais fรกcil de consultar para equipes que jรก dominam o SQL.

Assistentes de codificaรงรฃo de IA e grandes modelos de linguagem podem elaborar comandos de shell do HBase e Java O aprendizado de mรกquina tambรฉm auxilia na otimizaรงรฃo do desempenho, prevendo regiรตes de alta atividade, embora um engenheiro deva verificar cada consulta gerada.

Sim. Travas deslizantes portรกteis Copiloto do GitHub pode gerar trechos de cรณdigo HBase put, get e scan em Java ou o shell a partir de um comentรกrio curto, incluindo chamadas Bytes.toBytes e filtros Scan. RevAntes de executar o programa, verifique se o nome da tabela, as famรญlias de colunas e a API de tabela atuais estรฃo corretos.

Resuma esta postagem com: