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.
Í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ó.
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 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ó.
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:
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:
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.






