HBase-frågeexempel: kommandona put(), get() och scan()
⚡ Smart sammanfattning
HBase put, get och scan är kärnkommandona för att skriva och läsa data, vilket låter dig lagra ett cellvärde rad för rad, hämta en enskild rad eller bläddra bland många rader från skalet eller Java API.
Skriv data till HBase Table: Shell
Dessa exempel antar att HBase är installerad och igång, HBase-skalet är öppet, och en tabell med namnet guru99 finns redan med kolumnfamiljerna utbildning och projekt.
Kommandot put används för att lagra data i en tabell.
Syntax: put <'tablename'>,<'rowname'>,<'columnvalue'>,<'value'>
Det här kommandot används för följande saker:
- Det kommer att placera ett cell "värde" vid en definierad eller specificerad tabell eller rad eller kolumn.
- Den kommer valfritt att koordinera en tidsstämpel.
Till exempel, här placerar vi värden i tabellen "guru99" under rad r1 och kolumn c1:
hbase> put 'guru99', 'r1', 'c1', 'value', 10
Vi har placerat tre värden, 10, 15 och 30, i tabellen "guru99", som visas på skärmbilden nedan.
Anta att tabellen "guru99" har en tabellreferens, till exempel g. Du kan också köra kommandot på tabellreferensen, så här:
hbase> g.put 'guru99', 'r1', 'c1', 'value', 10
Utdata visas som visas på skärmbilden ovan efter att värden har placerats i "guru99".
Läs data från HBase Table: Shell
I det här avsnittet kontrollerar vi följande i HBase skal:
- Värden som infogas i HBase-tabellen "guru99".
- Kolumnnamn med de värden som finns i HBase-tabellen guru99.
Skanningsutdata nedan listar alla värden som infogas i "guru99", tillsammans med dess rad- och kolumnnamn:
Från skärmdumpen ovan kan vi utläsa följande:
- Om vi kör kommandot ”scan” i HBase-skalet kommer det att visa de infogade värdena i ”guru99” enligt följande.
- I HBase-skalet visas de värden som infogas av vår kod, med kolumn- och radnamnen.
- Här kan vi se att kolumnnamnen som infogas är ”utbildning” och ”projekt”.
- De värden som infogas är ”BigData” och ”HBase Tutorials” i de nämnda kolumnerna.
Du kan också använda kommandot get för att läsa data från en tabell.
Syntax: get <'tablename'>, <'rowname'>, {< Additional parameters>}
Här inkluderar de ytterligare parametrarna TIMERANGE, TIMESTAMP, VERSIONS och FILTERS. Med det här kommandot hämtar du en rad eller cellinnehållet som finns i tabellen. Du kan lägga till ytterligare parametrar, såsom TIMESTAMP, TIMERANGE, VERSIONS eller FILTERS, för att hämta en viss rad eller cellinnehåll. Tabellen nedan sammanfattar dessa parametrar:
| Parameter | Syfte |
|---|---|
| TIDSINTERVALL | Returnerar celler vars tidsstämpel faller inom en start- och sluttid. |
| TIDSSTÄMPEL | Returnerar endast den cellversion som lagrats med en exakt tidsstämpel. |
| VERSIONER | Anger hur många versioner av en cell som ska returneras (standardinställningen är 1). |
| FILTER | Tillämpar ett filter för att begränsa vilka rader eller kolumner som returneras. |
| KOLUMN | Begränsar resultatet till specifika kolumnfamiljer eller kvalificerare. |
Här är några fungerande exempel på get-kommandot:
hbase> get 'guru99', 'r1', {COLUMN => 'c1'}
För tabellen "guru99" visas värden för rad r1 och kolumn c1 med det här kommandot, som visas på skärmbilden nedan.
hbase> get 'guru99', 'r1'
För tabellen “guru99” kommer rad r1-värden att visas med detta kommando.
hbase> get 'guru99', 'r1', {TIMERANGE => [ts1, ts2]}
För tabellen “guru99” kommer rad r1-värden i tidsintervallet ts1 till ts2 att visas med detta kommando.
hbase> get 'guru99', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
För tabellen "guru99" visas värden för rad r1 och kolumnfamiljerna c1, c2 och c3 med detta kommando.
Skriv data till HBase-tabell: JAVA API
I det här steget ska vi skriva data till HBase-tabellen "guru99".
Först måste vi skriva kod för att infoga och hämta värden från HBase med hjälp av programmet HBaseLoading.java. För att skapa och infoga värden i en tabell på kolumnnivå kodar du enligt nedan.
Skärmdumpen nedan visar Java kod som bygger HBase-konfigurationen och infogar värden i "guru99":
Från skärmdumpen ovan:
- När vi skapar HBase-konfigurationen pekar den på de konfigurationer vi angav i filerna hbase-site.xml och hbase-default.xml under HBase-installationen.
- Skapande av tabellen “guru99” med hjälp av HTable-metoden.
- Lägger till rad1 i tabellen “guru99”.
- Ange kolumnnamnen ”utbildning” och ”projekt” och infoga värden i kolumnnamnen på respektive rad1. Värdena som infogas här är BigData och ”HBaseTutorials”.
Läs data från HBase Table: Java API
Oavsett vilka värden vi placerade i HBase-tabellen i avsnittet ovan, kommer vi här att hämta och visa dessa värden.
Konsolutdata nedan visar data som läses tillbaka från HBase-tabellen "guru99":
För att hämta resultat lagrade i "guru99":
- Här ska vi hämta värdena som är lagrade i kolumnfamiljerna, det vill säga ”utbildning” och ”projekt”.
- Med hjälp av kommandot "get" ska vi hämta de lagrade värdena i HBase-tabellen.
- Skannar resultat med kommandot ”scan”. Värdena som lagras i rad 1 visas i konsolen.
När koden är skriven kör du Java ansökan så här:
Högerklicka på HBaseLoading.java -> Kör som -> Java Ansökan.
Efter att ha kört "HBaseLoading.java" infogas värdena i "guru99" i varje kolumn i HBase, och i samma program kan den också hämta värden.
Här är hela koden:
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(); } } }
Anmärkning om API-versioner: Exemplet ovan använder HTable-klassen och dess add()-metod, som återspeglar det äldre HBase-klient-API:et. Sedan HBase 1.0 är HTable föråldrad. Modern kod hämtar en tabell via ConnectionFactory.createConnection(…).getTable(…) och bygger en Put med addColumn() istället för add(). Logiken bakom put, get och scan förblir densamma.






