Esempio di query HBase: comandi put(), get() e scan()

โšก Riepilogo intelligente

HBase put, get e scan sono i comandi principali per scrivere e leggere i dati, consentendo di memorizzare il valore di una cella per riga e colonna, recuperare una singola riga o sfogliare molte righe dalla shell o Java API.

  • โœ๏ธ Scrivi con put: Il comando PUT memorizza un valore in una tabella, riga, colonna e, facoltativamente, timestamp.
  • ๐Ÿ” Leggi con get: Il comando get restituisce una singola riga o cella, con le opzioni TIMERANGE, VERSIONS e FILTERS.
  • ๐Ÿ“œ Sfoglia tramite scansione: Il comando scan elenca numerose righe e i relativi valori di colonna all'interno di una tabella.
  • โ˜• Java API: Le stesse operazioni vengono eseguite in Java utilizzando Put, Get, Scan e la classe helper Bytes.
  • ๐Ÿงฌ Coordinate: Ogni valore รจ identificato dalla chiave di riga, dalla famiglia di colonne e dal qualificatore di colonna.
  • ๐Ÿค– Assistenza tramite intelligenza artificiale: Gli assistenti basati sull'IA elaborano codice per operazioni di inserimento, recupero e scansione, suggerendo inoltre schemi efficienti per le chiavi di riga.

Comandi di query HBase put(), get() e scan() nella shell e Java

Scrivi i dati nella tabella HBase: Shell

Questi esempi presuppongono che HBase sia installato e in esecuzione, la shell HBase รจ aperta e un tabella denominata guru99 giร  esiste con la colonna famiglie istruzione e progetti.

Il comando put viene utilizzato per memorizzare i dati in una tabella.

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

Questo comando viene utilizzato per le seguenti operazioni:

  • Verrร  inserito un "valore" di cella in una tabella, riga o colonna definita o specificata.
  • Puรฒ facoltativamente includere un'indicazione oraria.

Ad esempio, qui stiamo inserendo dei valori nella tabella "guru99" nella riga r1 e nella colonna c1:

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

Abbiamo inserito tre valori, 10, 15 e 30, nella tabella "guru99", come mostrato nello screenshot qui sotto.

Comando HBase shell put che inserisce i valori 10, 15 e 30 nella tabella guru99

Supponiamo che la tabella "guru99" abbia un riferimento di tabella, ad esempio g. รˆ possibile eseguire il comando anche sul riferimento di tabella, in questo modo:

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

L'output appare come mostrato nello screenshot qui sopra dopo aver inserito i valori in "guru99".

Leggi i dati dalla tabella HBase: Shell

In questa sezione controlliamo quanto segue nel Guscio HBase:

  • Valori inseriti nella tabella HBase "guru99".
  • Nomi delle colonne con i valori presenti nella tabella HBase guru99.

L'output della scansione riportato di seguito elenca ogni valore inserito in "guru99", insieme ai relativi nomi di riga e colonna:

Output del comando HBase shell scan che elenca righe e valori di colonna nella tabella guru99

Dallo screenshot qui sopra possiamo dedurre quanto segue:

  • Se eseguiamo il comando "scan" nella shell di HBase, i valori inseriti in "guru99" verranno visualizzati come segue.
  • Nella shell di HBase, verranno visualizzati i valori inseriti dal nostro codice, con i nomi delle colonne e delle righe.
  • Qui possiamo vedere che i nomi delle colonne inserite sono "istruzione" e "progetti".
  • I valori inseriti nelle colonne indicate sono "BigData" e "HBase Tutorials".

รˆ possibile utilizzare il comando get anche per leggere i dati da una tabella.

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

In questo caso, i parametri aggiuntivi includono TIMERANGE, TIMESTAMP, VERSIONS e FILTERS. Utilizzando questo comando, รจ possibile ottenere una riga o il contenuto di una cella presente nella tabella. รˆ possibile aggiungere ulteriori parametri, come TIMESTAMP, TIMERANGE, VERSIONS o FILTERS, per recuperare una riga o il contenuto di una cella specifica. La tabella seguente riassume questi parametri:

Parametro Missione
INTERVALLO DI TEMPO Restituisce le celle il cui timestamp rientra nell'intervallo di un orario di inizio e di fine.
TIMESTAMP Restituisce solo la versione della cella memorizzata in un determinato momento.
VERSIONI Imposta quante versioni di una cella restituire (il valore predefinito รจ 1).
FILTRI Applica un filtro per limitare le righe o le colonne da restituire.
COLUMN Limita il risultato a specifiche famiglie di colonne o qualificatori.

Ecco alcuni esempi pratici del comando get:

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

Per la tabella "guru99", i valori della riga r1 e della colonna c1 verranno visualizzati utilizzando questo comando, come mostrato nello screenshot qui sotto.

Comando HBase shell get che restituisce una singola riga r1 dalla tabella guru99

hbase> get 'guru99', 'r1'

Per la tabella "guru99", i valori della riga r1 verranno visualizzati utilizzando questo comando.

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

Per la tabella "guru99", i valori della riga r1 nell'intervallo di tempo da ts1 a ts2 verranno visualizzati utilizzando questo comando.

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

Per la tabella "guru99", i valori della riga r1 e delle famiglie di colonne c1, c2 e c3 verranno visualizzati utilizzando questo comando.

Scrivi dati nella tabella HBase: API JAVA

In questo passaggio, scriveremo i dati nella tabella HBase "guru99".

Innanzitutto, dobbiamo scrivere il codice per inserire e recuperare i valori da HBase, utilizzando il programma HBaseLoading.java. Per creare e inserire valori in una tabella a livello di colonna, il codice รจ il seguente.

Lo screenshot qui sotto mostra Java Codice che crea la configurazione di HBase e inserisce i valori in "guru99":

Java codice per la creazione di una configurazione HBase e l'inserimento di valori tramite l'API Put

Dallo screenshot qui sopra:

  • Quando creiamo la configurazione di HBase, questa fa riferimento alle configurazioni che abbiamo impostato nei file hbase-site.xml e hbase-default.xml durante l'installazione di HBase.
  • Creazione della tabella "guru99" utilizzando il metodo HTable.
  • Aggiunta della riga 1 alla tabella "guru99".
  • Specificando i nomi delle colonne "istruzione" e "progetti" e inserendo i valori nei nomi delle colonne nella rispettiva riga1. I valori inseriti qui sono BigData e โ€œHBaseTutorialsโ€.

Leggi i dati dalla tabella HBase: Java API

Qualunque valore abbiamo inserito nella tabella HBase nella sezione precedente, qui lo recupereremo e lo visualizzeremo.

L'output della console riportato di seguito mostra i dati letti dalla tabella HBase "guru99":

Java output della console lettura valori delle colonne istruzione e progetti dalla tabella HBase guru99

Per recuperare i risultati memorizzati in "guru99":

  • Qui andremo a recuperare i valori memorizzati nelle famiglie di colonne, ovvero "istruzione" e "progetti".
  • Utilizzando il comando "get", recupereremo i valori memorizzati nella tabella HBase.
  • Risultati della scansione tramite il comando "scan". I valori memorizzati nella riga 1 verranno visualizzati sulla console.

Una volta scritto il codice, lo esegui Java applicazione come questo:

Fare clic con il pulsante destro del mouse su HBaseLoading.java -> Esegui come -> Java Applicazione.

Dopo l'esecuzione di "HBaseLoading.java", i valori vengono inseriti in "guru99" in ogni colonna di HBase, e nello stesso programma รจ anche possibile recuperare i valori.

Ecco il codice 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 sulle versioni dell'API: L'esempio precedente utilizza la classe HTable e il suo metodo add(), che riflettono la vecchia API client di HBase. Dalla versione 1.0 di HBase, HTable รจ deprecata. Il codice moderno ottiene una Table tramite ConnectionFactory.createConnection(โ€ฆ).getTable(โ€ฆ) e crea un Put con addColumn() invece di add(). La logica di put, get e scan rimane la stessa.

DOMANDE FREQUENTI

Il comando `get` recupera una riga tramite la sua chiave e restituisce rapidamente il risultato. Il comando `scan` legge piรน righe in sequenza da una tabella o da un intervallo di chiavi, eventualmente filtrandole per colonne o per intervallo temporale. Utilizzare `get` per singole ricerche e `scan` per visualizzare o esportare piรน righe.

Una famiglia di colonne รจ un gruppo denominato di colonne memorizzate insieme e definite al momento della creazione della tabella. Un qualificatore di colonna รจ il nome della singola colonna all'interno di tale famiglia, ad esempio education:col1. Le famiglie devono esistere nello schema; i qualificatori possono essere aggiunti liberamente in fase di scrittura.

Utilizza il comando delete per rimuovere una singola cella, ad esempio delete 'guru99', 'r1', 'c1'. Utilizza deleteall per rimuovere un'intera riga: deleteall 'guru99', 'r1'. Per svuotare completamente una tabella, disabilitala, quindi esegui truncate 'guru99', che la elimina e la ricrea.

HBase conserva piรน versioni di ogni cella con timestamp. Il numero di versioni conservate รจ impostato per ogni famiglia di colonne dall'attributo VERSIONS, il cui valore predefinito รจ 1. Aggiungendo {VERSIONS => 3} a un'operazione GET o SCANSIONS si ottengono piรน versioni, mentre aggiungendo TIMESTAMP si ottiene una singola versione esatta.

Esegui il comando list per visualizzare tutte le tabelle in HBase. Esegui count 'guru99' per contare le righe in una tabella, eventualmente con un INTERVAL per monitorare l'avanzamento. Usa describe 'guru99' per visualizzare le famiglie di colonne e status 'simple' per verificare lo stato del cluster.

HBase non ha SQL nativo, ma Apache Phoenix aggiunge un livello SQL che compila le query in operazioni native di put, get e scan. Supporta la sintassi familiare di SELECT, UPSERT e JOIN, semplificando l'interrogazione di HBase per i team che hanno giร  familiaritร  con SQL.

Gli assistenti di programmazione AI e i modelli linguistici di grandi dimensioni possono redigere comandi shell HBase e Java Il codice client viene generato tramite un prompt in linguaggio naturale, vengono suggeriti modelli di chiavi di riga e vengono spiegati i filtri di scansione. L'apprendimento automatico contribuisce anche a ottimizzare le prestazioni prevedendo le aree critiche, sebbene ogni query generata debba essere verificata da un ingegnere.

Sรฌ. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. Copilota GitHub puรฒ generare frammenti HBase put, get e scan in Java o la shell da un breve commento, incluse le chiamate Bytes.toBytes e i filtri Scan. RevPrima di eseguirlo, controlla l'output per verificare il nome corretto della tabella, le famiglie di colonne e l'API della tabella corrente.

Riassumi questo post con: