Przykład zapytania HBase: polecenia put(), get() i scan()
⚡ Inteligentne podsumowanie
Polecenia HBase put, get i scan to podstawowe polecenia służące do zapisywania i odczytywania danych, pozwalające na przechowywanie wartości komórki według wiersza i kolumny, pobieranie pojedynczego wiersza lub przeglądanie wielu wierszy z poziomu powłoki lub Java API.
Zapisz dane w tabeli HBase: Shell
W tych przykładach przyjęto założenie, że HBase jest zainstalowany i uruchomiony, powłoka HBase jest otwarta i tabela o nazwie guru99 już istnieje z kolumną rodziny edukacja i projekty.
Polecenie put służy do przechowywania danych w tabeli.
Syntax: put <'tablename'>,<'rowname'>,<'columnvalue'>,<'value'>
To polecenie służy do następujących celów:
- Umieści „wartość” komórki w zdefiniowanej lub określonej tabeli, wierszu lub kolumnie.
- Opcjonalnie będzie koordynować znacznik czasu.
Na przykład tutaj umieszczamy wartości w tabeli „guru99” w wierszu r1 i kolumnie c1:
hbase> put 'guru99', 'r1', 'c1', 'value', 10
W tabeli „guru99” umieściliśmy trzy wartości: 10, 15 i 30, jak pokazano na zrzucie ekranu poniżej.
Załóżmy, że tabela „guru99” ma odwołanie do tabeli, takie jak g. Możesz również uruchomić polecenie na odwołaniu do tabeli w następujący sposób:
hbase> g.put 'guru99', 'r1', 'c1', 'value', 10
Po wpisaniu wartości do „guru99” wynik wygląda tak, jak pokazano na zrzucie ekranu powyżej.
Odczytaj dane z tabeli HBase: Shell
W tej sekcji sprawdzamy następujące elementy: Powłoka HBase:
- Wartości wstawione do tabeli HBase „guru99”.
- Nazwy kolumn z wartościami obecnymi w tabeli HBase guru99.
Poniżej znajduje się lista wyników skanowania zawierająca wszystkie wartości wstawione do „guru99” wraz z nazwami wierszy i kolumn:
Ze zrzutu ekranu powyżej możemy wywnioskować następujące informacje:
- Jeśli uruchomimy polecenie „scan” w powłoce HBase, wyświetlone zostaną wstawione wartości w „guru99” w następujący sposób.
- W powłoce HBase wyświetlane są wartości wstawione przez nasz kod wraz z nazwami kolumn i wierszy.
- Tutaj możemy zobaczyć, że wstawione nazwy kolumn to „edukacja” i „projekty”.
- Wprowadzono wartości „BigData” i „HBase Tutorials” do wymienionych kolumn.
Można również użyć polecenia get, aby odczytać dane z tabeli.
Syntax: get <'tablename'>, <'rowname'>, {< Additional parameters>}
Tutaj dodatkowe parametry obejmują TIMERANGE, TIMERANGE, VERSIONS i FILTERS. Za pomocą tego polecenia można pobrać zawartość wiersza lub komórki z tabeli. Można dodać dodatkowe parametry, takie jak TIMESTAMP, TIMERANGE, VERSIONS lub FILTERS, aby pobrać zawartość konkretnego wiersza lub komórki. Poniższa tabela podsumowuje te parametry:
| Parametr | Cel |
|---|---|
| ZAKRES CZASU | Zwraca komórki, których znacznik czasu mieści się w przedziale czasu początkowego i końcowego. |
| ZNAK CZASU | Zwraca tylko wersję komórki zapisaną w dokładnym znaczniku czasu. |
| WERSJE | Ustawia liczbę wersji komórki, które mają zostać zwrócone (wartość domyślna to 1). |
| FILTRY | Stosuje filtr ograniczający liczbę zwracanych wierszy i kolumn. |
| KOLUMNA | Ogranicza wynik do określonych rodzin kolumn lub kwalifikatorów. |
Oto kilka przykładów wykonania polecenia get:
hbase> get 'guru99', 'r1', {COLUMN => 'c1'}
W przypadku tabeli „guru99” wartości wiersza r1 i kolumny c1 zostaną wyświetlone po użyciu tego polecenia, jak pokazano na zrzucie ekranu poniżej.
hbase> get 'guru99', 'r1'
W przypadku tabeli „guru99” wartości wiersza r1 zostaną wyświetlone za pomocą tego polecenia.
hbase> get 'guru99', 'r1', {TIMERANGE => [ts1, ts2]}
W przypadku tabeli „guru99” za pomocą tego polecenia zostaną wyświetlone wartości wiersza r1 w zakresie czasu od ts1 do ts2.
hbase> get 'guru99', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
W przypadku tabeli „guru99” za pomocą tego polecenia zostaną wyświetlone wartości wiersza r1 oraz rodzin kolumn c1, c2 i c3.
Zapisz dane do tabeli HBase: API JAVA
W tym kroku zapiszemy dane do tabeli HBase „guru99”.
Najpierw musimy napisać kod do wstawiania i pobierania wartości z HBase, używając programu HBaseLoading.java. Aby utworzyć i wstawić wartości do tabeli na poziomie kolumn, należy użyć kodu pokazanego poniżej.
Zrzut ekranu poniżej pokazuje Java kod, który buduje konfigurację HBase i wstawia wartości do „guru99”:
Ze zrzutu ekranu powyżej:
- Podczas tworzenia konfiguracji HBase odnosi się ona do konfiguracji, które ustawiliśmy w plikach hbase-site.xml i hbase-default.xml podczas instalacji HBase.
- Utworzenie tabeli „guru99” przy użyciu metody HTable.
- Dodanie wiersza 1 do tabeli „guru99”.
- Określ nazwy kolumn „edukacja” i „projekty” i wstaw wartości w nazwy kolumn w odpowiednim wierszu 1. Wstawione tutaj wartości to BigData i „HBaseTutorials”.
Odczytaj dane z tabeli HBase: Java API
Niezależnie od tego, jakie wartości umieściliśmy w tabeli HBase w sekcji powyżej, tutaj je pobierzemy i wyświetlimy.
Poniższy wynik konsoli pokazuje dane odczytywane z tabeli HBase „guru99”:
Aby pobrać wyniki zapisane w „guru99”:
- Tutaj pobierzemy wartości przechowywane w rodzinach kolumn, tj. „edukacja” i „projekty”.
- Za pomocą polecenia „get” pobierzemy wartości zapisane w tabeli HBase.
- Wyniki skanowania za pomocą polecenia „scan”. Wartości zapisane w wierszu 1 zostaną wyświetlone na konsoli.
Po napisaniu kodu należy go uruchomić Java aplikacja lubię to:
Kliknij prawym przyciskiem myszy na HBaseLoading.java -> Uruchom jako -> Java Podanie.
Po uruchomieniu „HBaseLoading.java” wartości są wstawiane do „guru99” w każdej kolumnie w HBase, a ten sam program może również pobierać wartości.
Oto pełny kod:
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(); } } }
Uwaga dotycząca wersji API: Powyższy przykład wykorzystuje klasę HTable i jej metodę add(), które odzwierciedlają starszy interfejs API klienta HBase. Od wersji HBase 1.0, HTable jest przestarzały. Współczesny kod pobiera tabelę za pomocą ConnectionFactory.createConnection(…).getTable(…) i tworzy obiekt Put za pomocą addColumn() zamiast add(). Logika operacji put, get i scan pozostaje taka sama.






