HBase lekérdezési példa: put(), get() és scan() parancsok

⚡ Okos összefoglaló

A HBase put, get és scan parancsai az adatok írásának és olvasásának alapvető parancsai, amelyek lehetővé teszik a cellaértékek soronkénti és oszloponkénti tárolását, egyetlen sor lekérését, vagy több sor böngészését a parancsértelmezőből vagy a `shell`-ből. Java API.

  • ✍️ Írd be put paranccsal: A put parancs egy értéket tárol egy táblázatban, sorban, oszlopban és opcionális időbélyeggel.
  • 🔍 Olvasd el a get paranccsal: A get parancs egyetlen sort vagy cellát ad vissza, a TIMERANGE, VERSIONS és FILTERS opciókkal.
  • 📜 Böngészés szkenneléssel: A scan parancs egy táblázat számos sorát és azok oszlopértékeit listázza ki.
  • Java API-k: Ugyanezek a műveletek futnak le Java a Put, Get, Scan metódusok és a Bytes segítő osztály használatával.
  • 🧬 Koordináták: Minden értéket sorkulcs, oszlopcsalád és oszlopminősítő címez.
  • 🤖 MI segítség: A mesterséges intelligencia asszisztensek elkészítik a put, get és scan kódot, és hatékony sor-kulcs terveket javasolnak.

HBase put(), get() és scan() lekérdezési parancsok shellben és Java

Írja be az adatokat a HBase táblába: Shell

Ezek a példák feltételezik, hogy a HBase a következő: telepítve és fut, a HBase shell nyitva van, és egy guru99 nevű tábla már létezik a családok, oktatás és projektek oszlopban.

A put parancsot arra használjuk, hogy adatokat tároljunk egy táblázatban.

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

Ez a parancs a következő dolgokra használható:

  • Ez egy cella "értékét" helyezi egy meghatározott vagy megadott táblázatba, sorba vagy oszlopba.
  • Opcionálisan koordinál egy időbélyeget.

Például itt értékeket helyezünk a „guru99” táblába az r1 sor és a c1 oszlop alá:

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

Három értéket, 10-et, 15-öt és 30-at helyeztünk el a „guru99” táblázatban, ahogy az az alábbi képernyőképen is látható.

A HBase shell put parancs a 10, 15 és 30 értékeket beilleszti a guru99 táblába.

Tegyük fel, hogy a „guru99” táblának van egy táblahivatkozása, például a g. A parancsot a táblahivatkozáson is futtathatja, például így:

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

A kimenet a fenti képernyőképen látható módon jelenik meg, miután értékeket helyeztünk a „guru99”-be.

Adatok olvasása a HBase táblázatból: Shell

Ebben a szakaszban a következőket ellenőrizzük a HBase shell:

  • A „guru99” HBase táblába beszúrt értékek.
  • Oszlopnevek a HBase táblában (guru99) jelen lévő értékekkel.

Az alábbi szkennelési kimenet felsorolja a „guru99”-be beszúrt összes értéket, a sor- és oszlopnevekkel együtt:

A HBase shell scan parancs kimenete a guru99 táblában felsorolja a sorok és oszlopok értékeit.

A fenti képernyőképből a következőkre következtethetünk:

  • Ha a „scan” parancsot futtatjuk a HBase shellben, akkor a „guru99”-be beszúrt értékeket a következőképpen jeleníti meg.
  • A HBase shellben a kódunk által beszúrt értékeket jeleníti meg az oszlop- és sornevekkel együtt.
  • Itt láthatjuk a beszúrt oszlopneveket: „oktatás” és „projektek”.
  • A beszúrt értékek a „BigData” és a „HBase Tutorials” a megemlített oszlopokba.

A get parancsot is használhatod adatok beolvasására egy táblázatból.

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

Itt a további paraméterek a következők: TIMERANGE, TIMESTAMP, VERSIONS és FILTERS. Ezzel a paranccsal a táblázatban található sor vagy cella tartalmát kérheti le. További paramétereket, például TIMESTAMP, TIMERANGE, VERSIONS vagy FILTERS adhat hozzá egy adott sor vagy cella tartalmának lekéréséhez. Az alábbi táblázat összefoglalja ezeket a paramétereket:

Vizsgált paraméter Cél
IDŐTARTOMÁNY Azokat a cellákat adja vissza, amelyek időbélyege a kezdési és befejezési időpontok közé esik.
IDŐBÉLYEG Csak a pontos időbélyeggel tárolt cellaverziót adja vissza.
VERSIONS Beállítja, hogy egy cella hány verzióját adja vissza (az alapértelmezett érték 1).
FILTERS Szűrőt alkalmaz a visszaadott sorok vagy oszlopok korlátozására.
oszlop Az eredményt adott oszlopcsaládokra vagy minősítőkre korlátozza.

Íme néhány működő példa a get parancsra:

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

A „guru99” tábla r1 sorának és c1 oszlopának értékei jelennek meg ezzel a paranccsal, ahogy az az alábbi képernyőképen is látható.

A HBase shell get parancs egyetlen r1 sort ad vissza a guru99 táblából.

hbase> get 'guru99', 'r1'

A „guru99” tábla r1 sorának értékei jelennek meg ezzel a paranccsal.

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

A „guru99” tábla r1 sorában a ts1 és ts2 közötti időtartományban lévő értékek jelennek meg ezzel a paranccsal.

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

A „guru99” tábla r1 sorának és a c1, c2 és c3 oszlopcsaládok értékei jelennek meg ezzel a paranccsal.

Adatok írása a HBase táblába: JAVA API

Ebben a lépésben adatokat fogunk írni a „guru99” HBase táblába.

Először is, kódot kell írnunk az értékek HBase-ből való beszúrásához és lekéréséhez a HBaseLoading.java program használatával. Az értékek oszlopszintű létrehozásához és beszúrásához egy táblázatba az alábbiak szerint kell kódolnunk.

Az alábbi képernyőképen látható a Java kód, ami felépíti a HBase konfigurációt és értékeket szúr be a „guru99”-be:

Java HBase konfigurációt létrehozó kód és értékek beszúrása a Put API segítségével

A fenti képernyőképről:

  • Amikor létrehozzuk a HBase konfigurációját, az a hbase-site.xml és hbase-default.xml fájlokban a HBase telepítése során beállított konfigurációkra mutat.
  • „guru99” tábla létrehozása a HTable metódussal.
  • Az 1. sor hozzáadása a „guru99” táblához.
  • Az „oktatás” és a „projektek” oszlopnevek megadása és értékek beillesztése az oszlopnevekbe a megfelelő 1. sorban. Az ide beillesztett értékek a következők: BigData és a „HBase Tutorials”-ok.

Adatok olvasása a HBase táblából: Java API

Bármilyen értékeket is helyeztünk el a HBase táblában a fenti szakaszban, itt ezeket az értékeket fogjuk lekérni és megjeleníteni.

Az alábbi konzolkimenet a „guru99” HBase táblából visszaolvasott adatokat mutatja:

Java konzol kimenet, amely a HBase táblából, a guru99-ből olvassa az oktatási és projekt oszlopértékeket

A „guru99”-ben tárolt eredmények lekéréséhez:

  • Itt fogjuk lekérni az oszlopcsaládokban tárolt értékeket, azaz az „oktatás” és a „projektek” oszlopokat.
  • A „get” parancs használatával lekérjük a HBase táblában tárolt értékeket.
  • Eredmények beolvasása a „scan” paranccsal. Az 1. sorban tárolt értékek jelennek meg a konzolon.

Miután a kód meg van írva, lefuttatod a Java alkalmazás mint ez:

Jobb klikk a HBaseLoading.java fájlon -> Futtatás másként -> Java Alkalmazás.

A „HBaseLoading.java” futtatása után az értékek a HBase minden oszlopában beszúródnak a „guru99”-be, és ugyanebben a programban értékeket is lekérhet.

Itt a teljes kód:

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

Megjegyzés az API verziókkal kapcsolatban: A fenti példa a HTable osztályt és annak add() metódusát használja, amelyek a régebbi HBase kliens API-t tükrözik. A HBase 1.0 óta a HTable elavult. A modern kód a ConnectionFactory.createConnection(…).getTable(…) metóduson keresztül kér le egy Table-t, és az addColumn() metódussal épít fel egy Put metódust az add() metódus helyett. A put, get és scan logikája változatlan marad.

GYIK

A get parancs egy sort keres a sorkulcsa alapján, és gyorsan visszaadja az eredményt. A scan parancs több sort olvas be egymás után egy táblázatban vagy kulcstartományban, opcionálisan oszlopok vagy idő szerint szűrve. A get parancsot egyszeri keresésekhez, a scan parancsot pedig böngészéshez vagy több sor exportálásához használhatjuk.

Az oszlopcsalád az oszlopok elnevezett csoportja, amelyeket együtt tárolunk és a tábla létrehozásakor definiálunk. Az oszlopminősítő az adott családon belüli egyedi oszlopnév, például education:col1. A családoknak létezniük kell a sémában; a minősítők szabadon hozzáadhatók írás közben.

Egyetlen cella eltávolításához használd a delete parancsot, például: delete 'guru99', 'r1', 'c1'. Egy teljes sor eltávolításához használd a deleteall parancsot: deleteall 'guru99', 'r1'. Egy táblázat teljes kiürítéséhez tiltsd le, majd futtasd a truncate 'guru99' parancsot, amely elveti és újra létrehozza azt.

A HBase minden cellából több időbélyeggel ellátott verziót tárol. A megőrzött számot oszlopcsaládonként a VERSIONS attribútum állítja be, amelynek alapértelmezése 1. Adjon hozzá {VERSIONS => 3} értéket egy get vagy scan művelethez több verzió visszaadásához, vagy egy TIMESTAMP értéket egy pontos verzió lekéréséhez.

Futtassa a listát a HBase összes táblájának megtekintéséhez. Futtassa a count 'guru99' parancsot a tábla sorainak számlálásához, opcionálisan egy INTERVALLUMMAL a folyamat jelzéséhez. Használja a describe 'guru99' parancsot az oszlopcsaládok megtekintéséhez, és a status 'simple' parancsot a fürt állapotának ellenőrzéséhez.

A HBase nem rendelkezik natív SQL-lel, de az Apache Phoenix egy SQL-réteget ad hozzá, amely a lekérdezéseket natív put, get és scan műveletekké fordítja. Támogatja az ismerős SELECT, UPSERT és JOIN szintaxist, így a HBase könnyebben lekérdezhetővé teszi azokat a csapatokat, akik már jártasak az SQL-ben.

A mesterséges intelligencia által fejlesztett kódolási asszisztensek és a nagy nyelvi modellek képesek HBase shell parancsokat megrajzolni és Java klienskódot egy egyszerű nyelvi promptból, sor-kulcs terveket javasol, és elmagyarázza a keresési szűrőket. A gépi tanulás a forró területek előrejelzésével is segít a teljesítmény finomhangolásában, bár egy mérnöknek minden generált lekérdezést ellenőriznie kell.

Igen. GitHub másodpilóta HBase put, get és scan kódrészleteket generálhat Java vagy a shell egy rövid megjegyzésből, beleértve a Bytes.toBytes hívásokat és a Scan szűrőket. RevA futtatás előtt tekintse meg a kimenetet a helyes táblanévhez, az oszlopcsaládokhoz és az aktuális Table API-hoz.

Foglald össze ezt a bejegyzést a következőképpen: