Exemplu de interogare HBase: comenzi put(), get() și scan()

⚡ Rezumat inteligent

Comenzile put, get și scan din HBase sunt comenzile principale pentru scrierea și citirea datelor, permițându-vă să stocați valoarea unei celule pe rând și coloană, să preluați un singur rând sau să răsfoiți mai multe rânduri din shell sau Java API-ul.

  • ✍️ Scrieți cu put: Comanda put stochează o valoare într-un tabel, rând, coloană și, opțional, o marcă de timp.
  • 🔍 Citiți cu get: Comanda get returnează un singur rând sau o singură celulă, cu opțiunile TIMERANGE, VERSIONS și FILTERS.
  • 📜 Răsfoire cu scanare: Comanda scan listează mai multe rânduri și valorile coloanelor acestora într-un tabel.
  • Java API-uri: Aceleași operațiuni se desfășoară în Java folosind Put, Get, Scan și clasa helper Bytes.
  • 🧬 coordonate: Fiecare valoare este adresată prin cheia de rând, familia de coloane și calificatorul de coloană.
  • 🤖 Asistență AI: Asistenții inteligenți artificiali redactează codul „put”, „get” și „scanează” și sugerează modele eficiente de chei de rând.

Comenzile de interogare HBase put(), get() și scan() în shell și Java

Scrieți date în tabelul HBase: Shell

Aceste exemple presupun că HBase este instalat și rulează, shell-ul HBase este deschis și a tabel numit guru99 există deja cu coloanele familii educație și proiecte.

Comanda put este utilizată pentru stocarea datelor într-un tabel.

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

Această comandă este utilizată pentru următoarele lucruri:

  • Acesta va pune o „valoare” celulei la un tabel, rând sau coloană definit sau specificat.
  • Opțional, va coordona o marcă temporală.

De exemplu, aici plasăm valori în tabelul „guru99” sub rândul r1 și coloana c1:

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

Am plasat trei valori, 10, 15 și 30, în tabelul „guru99”, așa cum se arată în captura de ecran de mai jos.

Comanda put din shell-ul HBase inserează valorile 10, 15 și 30 în tabelul guru99

Să presupunem că tabelul „guru99” are o referință de tabel, cum ar fi g. De asemenea, puteți rula comanda pe referința tabelului, astfel:

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

Rezultatul apare așa cum se arată în captura de ecran de mai sus după plasarea valorilor în „guru99”.

Citiți datele din tabelul HBase: Shell

În această secțiune, verificăm următoarele aspecte din Carcasa HBase:

  • Valorile care sunt inserate în tabelul HBase „guru99”.
  • Numele coloanelor cu valorile prezente în tabelul HBase guru99.

Rezultatul scanării de mai jos listează fiecare valoare inserată în „guru99”, împreună cu numele rândurilor și coloanelor sale:

Rezultatul comenzii de scanare a shell-ului HBase listează valorile rândurilor și coloanelor în tabelul guru99

Din captura de ecran de mai sus, putem deduce următoarele:

  • Dacă rulăm comanda „scan” în shell-ul HBase, aceasta va afișa valorile inserate în „guru99” după cum urmează.
  • În shell-ul HBase, se vor afișa valorile inserate de codul nostru, împreună cu numele coloanelor și rândurilor.
  • Aici putem vedea că numele coloanelor inserate sunt „educație” și „proiecte”.
  • Valorile inserate în coloanele menționate sunt „BigData” și „HBase Tutorials”.

De asemenea, puteți utiliza comanda get pentru a citi date dintr-un tabel.

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

Aici, parametrii suplimentari includ TIMERANGE, TIMESTAMP, VERSIONS și FILTERS. Folosind această comandă, obțineți un rând sau conținutul celulei prezente în tabel. Puteți adăuga parametri suplimentari, cum ar fi TIMESTAMP, TIMESTAMP, VERSIONS sau FILTERS, pentru a prelua conținutul unui anumit rând sau al unei celule. Tabelul de mai jos rezumă acești parametri:

Parametru Scop
INTERVAL DE TIMP Returnează celulele al căror marcaj temporal se încadrează într-o oră de început și una de sfârșit.
TIMESTAMP-UL Returnează doar versiunea celulei stocată la un interval de timp exact.
VERSIUNI Setează câte versiuni ale unei celule să fie returnate (implicit este 1).
FILTRE Aplică un filtru pentru a restricționa rândurile sau coloanele returnate.
COLOANA Limitează rezultatul la anumite familii de coloane sau calificatori.

Iată câteva exemple funcționale ale comenzii get:

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

Pentru tabelul „guru99”, valorile rândului r1 și coloanei c1 vor fi afișate folosind această comandă, așa cum se arată în captura de ecran de mai jos.

Comanda HBase shell get returnează un singur rând r1 din tabelul guru99

hbase> get 'guru99', 'r1'

Pentru tabelul „guru99”, valorile rândului r1 vor fi afișate folosind această comandă.

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

Pentru tabelul „guru99”, valorile rândului r1 din intervalul de timp ts1 până la ts2 vor fi afișate folosind această comandă.

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

Pentru tabelul „guru99”, valorile rândului r1 și ale familiilor de coloane c1, c2 și c3 vor fi afișate folosind această comandă.

Scrieți date în tabelul HBase: API JAVA

În acest pas, vom scrie date în tabelul HBase „guru99”.

Mai întâi, trebuie să scriem cod pentru a insera și a recupera valori din HBase, folosind programul HBaseLoading.java. Pentru a crea și insera valori într-un tabel la nivel de coloană, codați așa cum se arată mai jos.

Captura de ecran de mai jos arată Java cod care construiește configurația HBase și inserează valori în „guru99”:

Java cod care creează o configurație HBase și inserează valori cu API-ul Put

Din captura de ecran de mai sus:

  • Când creăm configurația HBase, aceasta indică orice configurații am setat în fișierele hbase-site.xml și hbase-default.xml în timpul instalării HBase.
  • Crearea tabelului „guru99” folosind metoda HTable.
  • Se adaugă rândul 1 la tabelul „guru99”.
  • Specificarea numelor coloanelor „educație” și „proiecte” și inserarea valorilor în numele coloanelor din rândul1 respectiv. Valorile inserate aici sunt BigData și „Tutoriale HBase”.

Citiți datele din tabelul HBase: Java API

Indiferent de valorile pe care le-am plasat în tabelul HBase din secțiunea de mai sus, aici le vom prelua și afișa.

Rezultatul consolei de mai jos arată datele citite din tabelul HBase „guru99”:

Java ieșirea consolei citește valorile coloanelor educație și proiecte din tabelul HBase guru99

Pentru recuperarea rezultatelor stocate în „guru99”:

  • Aici vom prelua valorile stocate în familiile de coloane, adică „educație” și „proiecte”.
  • Folosind comanda „get”, vom prelua valorile stocate în tabelul HBase.
  • Rezultatele scanării folosind comanda „scan”. Valorile stocate în rândul 1 vor fi afișate în consolă.

Odată ce codul este scris, rulați Java cerere asa:

Faceți clic dreapta pe HBaseLoading.java -> Executare ca -> Java Aplicație.

După rularea fișierului „HBaseLoading.java”, valorile sunt inserate în „guru99” în fiecare coloană din HBase și, în același program, se pot prelua și valori.

Iată codul complet:

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();
}
}
}

Notă privind versiunile API: Exemplul de mai sus folosește clasa HTable și metoda sa add(), care reflectă API-ul client HBase mai vechi. De la HBase 1.0, HTable este depreciat. Codul modern obține un Table prin ConnectionFactory.createConnection(…).getTable(…) și construiește un Put cu addColumn() în loc de add(). Logica comenzilor put, get și scan rămâne aceeași.

Întrebări frecvente

Comanda get preia un rând după cheia sa de rând și returnează rapid valoarea. Comanda scan citește mai multe rânduri secvențial într-un tabel sau într-un interval de chei, opțional filtrate după coloane sau timp. Folosește get pentru căutări individuale și scan pentru răsfoirea sau exportarea mai multor rânduri.

O familie de coloane este un grup denumit de coloane stocate împreună și definite la crearea tabelului. Un calificator de coloană este numele individual al coloanei din cadrul acelei familii, cum ar fi education:col1. Familiile trebuie să existe în schemă; calificatorii pot fi adăugați liber în timpul scrierii.

Folosește comanda delete pentru a elimina o celulă, de exemplu, delete 'guru99', 'r1', 'c1'. Folosește deleteall pentru a elimina un rând întreg: deleteall 'guru99', 'r1'. Pentru a goli complet un tabel, dezactivează-l, apoi rulează truncate 'guru99', care îl șterge și îl recreează.

HBase păstrează mai multe versiuni cu marcaj temporal al fiecărei celule. Numărul reținut este setat pentru fiecare familie de coloane prin atributul VERSIONS, care implicit este 1. Adăugați {VERSIONS => 3} la o comandă get sau scan pentru a returna mai multe versiuni sau o comandă TIMESTAMP pentru a prelua o versiune exactă.

Rulează comanda `list` pentru a vedea fiecare tabel din HBase. Rulează comanda `count 'guru99' pentru a număra rândurile dintr-un tabel, opțional cu un interval pentru progres. Folosește comanda `describe 'guru99' pentru a vizualiza familiile de coloane și comanda `status 'simple' pentru a verifica starea clusterului.

HBase nu are SQL nativ, dar Apache Phoenix adaugă un strat SQL care compilează interogările în operații native de tip put, get și scan. Acesta acceptă sintaxa familiară SELECT, UPSERT și JOIN, ceea ce face ca HBase să fie mai ușor de interogat pentru echipele care deja stăpânesc SQL.

Asistenții de codare cu inteligență artificială și modelele lingvistice mari pot redacta comenzi shell HBase și Java cod client dintr-o solicitare în limbaj simplu, sugerează modele de chei de rând și explică filtrele de scanare. Învățarea automată ajută, de asemenea, la reglarea performanței prin prezicerea regiunilor sensibile, deși un inginer ar trebui să verifice fiecare interogare generată.

Da. Copilotul GitHub poate genera fragmente HBase put, get și scan în Java sau shell-ul dintr-un comentariu scurt, inclusiv apeluri Bytes.toBytes și filtre de scanare. RevVizualizați rezultatul pentru numele corect al tabelului, familiile de coloane și API-ul Table curent înainte de a-l rula.

Rezumați această postare cu: