HBase-Abfragebeispiel: put()-, get()- und scan()-Befehle

⚡ Intelligente Zusammenfassung

Die HBase-Befehle put, get und scan sind die Kernbefehle zum Schreiben und Lesen von Daten. Sie ermöglichen es Ihnen, einen Zellenwert zeilen- und spaltenweise zu speichern, eine einzelne Zeile abzurufen oder viele Zeilen über die Shell oder die Benutzeroberfläche zu durchsuchen. Java API.

  • ✍️ Schreiben Sie mit put: Der Befehl „put“ speichert einen Wert in einer Tabelle, Zeile, Spalte und optional einem Zeitstempel.
  • 🔍 Lesen Sie mit „get“: Der Befehl get gibt eine einzelne Zeile oder Zelle mit den Optionen TIMERANGE, VERSIONS und FILTERS zurück.
  • 📜 Durchsuchen mit Scan: Der Befehl scan listet viele Zeilen und deren Spaltenwerte in einer Tabelle auf.
  • Java API: Die gleichen Operationen laufen in Java unter Verwendung von Put, Get, Scan und der Hilfsklasse Bytes.
  • 🧬 Koordinaten: Jeder Wert wird über Zeilenschlüssel, Spaltenfamilie und Spaltenqualifizierer adressiert.
  • 🤖 KI-Unterstützung: KI-Assistenten entwerfen Code zum Einfügen, Abrufen und Scannen und schlagen effiziente Zeilenschlüssel-Designs vor.

HBase put(), get() und scan() Abfragebefehle in der Shell und Java

Daten in die HBase-Tabelle schreiben: Shell

Diese Beispiele setzen voraus, dass HBase installiert und läuftDie HBase-Shell ist geöffnet, und ein Tabelle mit dem Namen guru99 Existiert bereits in der Spalte „Familien, Bildung und Projekte“.

Der Befehl „put“ dient zum Speichern von Daten in einer Tabelle.

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

Dieser Befehl wird für folgende Zwecke verwendet:

  • Es wird einen Zellwert in eine definierte oder angegebene Tabelle, Zeile oder Spalte einfügen.
  • Optional wird ein Zeitstempel hinzugefügt.

Zum Beispiel tragen wir hier Werte in die Tabelle „guru99“ in Zeile r1 und Spalte c1 ein:

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

Wir haben in der Tabelle „guru99“ drei Werte, 10, 15 und 30, eingetragen, wie im folgenden Screenshot dargestellt.

Der HBase-Shell-Befehl `put` fügt die Werte 10, 15 und 30 in die Tabelle guru99 ein.

Angenommen, die Tabelle „guru99“ enthält eine Tabellenreferenz, beispielsweise g. Sie können den Befehl auch auf die Tabellenreferenz anwenden, etwa so:

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

Nach Eingabe der Werte in „guru99“ erscheint die Ausgabe wie im obigen Screenshot dargestellt.

Daten aus der HBase-Tabelle lesen: Shell

In diesem Abschnitt überprüfen wir Folgendes: HBase-Shell:

  • Werte, die in die HBase-Tabelle „guru99“ eingefügt werden.
  • Spaltennamen mit den in der HBase-Tabelle guru99 vorhandenen Werten.

Die unten stehende Scan-Ausgabe listet jeden in „guru99“ eingefügten Wert zusammen mit seinen Zeilen- und Spaltennamen auf:

Ausgabe des HBase-Shell-Scan-Befehls, der die Zeilen und Spaltenwerte in der Tabelle guru99 auflistet

Aus dem obigen Screenshot lässt sich Folgendes schließen:

  • Wenn wir den Befehl „scan“ in der HBase-Shell ausführen, werden die in „guru99“ eingefügten Werte wie folgt angezeigt.
  • In der HBase-Shell werden die von unserem Code eingefügten Werte zusammen mit den Spalten- und Zeilennamen angezeigt.
  • Hier sehen wir, dass die Spaltennamen „Bildung“ und „Projekte“ lauten.
  • In die genannten Spalten wurden die Werte „BigData“ und „HBase Tutorials“ eingefügt.

Mit dem Befehl „get“ können Sie auch Daten aus einer Tabelle lesen.

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

Zu den zusätzlichen Parametern gehören TIMESTAMP, TIMESTAMP, VERSIONS und FILTERS. Mit diesem Befehl erhalten Sie eine Zeile oder den Inhalt einer Zelle aus der Tabelle. Sie können weitere Parameter wie TIMESTAMP, TIMERANGE, VERSIONS oder FILTERS hinzufügen, um eine bestimmte Zeile oder einen bestimmten Zelleninhalt abzurufen. Die folgende Tabelle fasst diese Parameter zusammen:

Parameter Zweck
ZEITSPANNE Gibt Zellen zurück, deren Zeitstempel innerhalb eines Start- und Endzeitpunkts liegt.
TIMESTAMP Gibt nur die Zellversion zurück, die zu einem bestimmten Zeitpunkt gespeichert wurde.
VERSIONEN Legt fest, wie viele Versionen einer Zelle zurückgegeben werden sollen (Standardwert ist 1).
FILTER Wendet einen Filter an, um die zurückgegebenen Zeilen oder Spalten einzuschränken.
SPALTE Beschränkt das Ergebnis auf bestimmte Spaltenfamilien oder Qualifizierer.

Hier sind einige durchgerechnete Beispiele für den Befehl „get“:

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

Für die Tabelle „guru99“ werden mit diesem Befehl die Werte der Zeile r1 und Spalte c1 angezeigt, wie im folgenden Screenshot dargestellt.

Der HBase-Shell-Befehl „get“ gibt eine einzelne Zeile r1 aus der Tabelle guru99 zurück.

hbase> get 'guru99', 'r1'

Mit diesem Befehl werden die Werte der Zeile r1 der Tabelle „guru99“ angezeigt.

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

Mit diesem Befehl werden für die Tabelle „guru99“ die Werte der Zeile r1 im Zeitbereich ts1 bis ts2 angezeigt.

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

Mit diesem Befehl werden für die Tabelle „guru99“ die Werte der Zeile r1 und der Spaltenfamilien c1, c2 und c3 angezeigt.

Daten in die HBase-Tabelle schreiben: JAVA API

In diesem Schritt schreiben wir Daten in die HBase-Tabelle „guru99“.

Zuerst müssen wir Code schreiben, um Werte in HBase einzufügen und abzurufen. Dazu verwenden wir das Programm HBaseLoading.java. Um Werte auf Spaltenebene in eine Tabelle einzufügen, verwenden Sie den unten gezeigten Code.

Der untenstehende Screenshot zeigt die Java Code, der die HBase-Konfiguration erstellt und Werte in „guru99“ einfügt:

Java Code zum Erstellen einer HBase-Konfiguration und zum Einfügen von Werten mit der Put-API

Aus dem obigen Screenshot:

  • Wenn wir die HBase-Konfiguration erstellen, verweist sie auf die Konfigurationen, die wir während der HBase-Installation in den Dateien hbase-site.xml und hbase-default.xml festgelegt haben.
  • Erstellung der Tabelle „guru99“ mithilfe der HTable-Methode.
  • Zeile 1 wird der Tabelle „guru99“ hinzugefügt.
  • Die Spaltennamen „education“ und „projects“ werden angegeben und in der jeweiligen Zeile 1 Werte in die Spaltennamen eingefügt. Die hier eingefügten Werte sind: Bigdata und „HBaseTutorials“.

Daten aus HBase-Tabelle lesen: Java API

Die Werte, die wir im vorherigen Abschnitt in die HBase-Tabelle eingetragen haben, werden wir hier abrufen und anzeigen.

Die untenstehende Konsolenausgabe zeigt die Daten, die aus der HBase-Tabelle „guru99“ gelesen werden:

Java Konsolenausgabe beim Lesen der Werte der Spalten „Ausbildung“ und „Projekte“ aus der HBase-Tabelle guru99

Zum Abrufen von Ergebnissen, die in „guru99“ gespeichert sind:

  • Hier rufen wir die Werte ab, die in den Spaltenfamilien „education“ und „projects“ gespeichert sind.
  • Mit dem Befehl „get“ rufen wir die in der HBase-Tabelle gespeicherten Werte ab.
  • Die Scanergebnisse werden mit dem Befehl „scan“ abgerufen. Die in Zeile 1 gespeicherten Werte werden in der Konsole angezeigt.

Sobald der Code geschrieben ist, führen Sie ihn aus. Java Anwendung so was:

Rechtsklick auf HBaseLoading.java -> Ausführen als -> Java Anwendung.

Nach dem Ausführen von „HBaseLoading.java“ werden die Werte in „guru99“ in jeder Spalte von HBase eingefügt, und im selben Programm können auch Werte abgerufen werden.

Hier ist der vollständige Code:

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

Hinweis zu API-Versionen: Das obige Beispiel verwendet die HTable-Klasse und ihre add()-Methode, die die ältere HBase-Client-API widerspiegeln. Seit HBase 1.0 ist HTable veraltet. Moderner Code ruft eine Tabelle über ConnectionFactory.createConnection(…).getTable(…) ab und erstellt einen Put-Vorgang mit addColumn() anstelle von add(). Die Logik von Put, Get und Scan bleibt unverändert.

Häufig gestellte Fragen

Der Befehl `get` ruft eine Zeile anhand ihres Zeilenschlüssels ab und liefert ein schnelles Ergebnis. Der Befehl `scan` liest mehrere Zeilen nacheinander in einer Tabelle oder einem Schlüsselbereich, optional gefiltert nach Spalten oder Zeit. Verwenden Sie `get` für einzelne Abfragen und `scan` zum Durchsuchen oder Exportieren mehrerer Zeilen.

Eine Spaltenfamilie ist eine benannte Gruppe von Spalten, die zusammen gespeichert und beim Erstellen der Tabelle definiert wird. Ein Spaltenqualifizierer ist der Name einer einzelnen Spalte innerhalb dieser Familie, z. B. education:col1. Familien müssen im Schema vorhanden sein; Qualifizierer können beim Schreiben beliebig hinzugefügt werden.

Verwenden Sie den Befehl `delete`, um eine einzelne Zelle zu entfernen, z. B. `delete 'guru99', 'r1', 'c1'`. Mit `deleteall` löschen Sie eine ganze Zeile: `deleteall 'guru99', 'r1'`. Um eine Tabelle vollständig zu leeren, deaktivieren Sie sie und führen Sie anschließend `truncate 'guru99'` aus. Dadurch wird die Tabelle gelöscht und neu erstellt.

HBase speichert mehrere mit Zeitstempeln versehene Versionen jeder Zelle. Die Anzahl der gespeicherten Versionen wird pro Spaltenfamilie durch das Attribut VERSIONS festgelegt, das standardmäßig auf 1 gesetzt ist. Fügen Sie {VERSIONS => 3} zu einem GET- oder SCAN-Befehl hinzu, um mehrere Versionen zurückzugeben, oder einen TIMESTAMP-Parameter, um eine exakte Version abzurufen.

Führen Sie `list` aus, um alle Tabellen in HBase anzuzeigen. Mit `count 'guru99'` zählen Sie die Zeilen einer Tabelle, optional mit einem Intervall für die Fortschrittsanzeige. Verwenden Sie `describe 'guru99'`, um Spaltenfamilien anzuzeigen, und `status 'simple'`, um den Clusterzustand zu überprüfen.

HBase verfügt über kein natives SQL, aber Apache Phoenix fügt eine SQL-Schicht hinzu, die Abfragen in native PUT-, GET- und SCAN-Operationen kompiliert. Es unterstützt die bekannte SELECT-, UPSERT- und JOIN-Syntax und vereinfacht so die Abfrage von HBase für Teams mit fundierten SQL-Kenntnissen.

KI-Programmierassistenten und große Sprachmodelle können HBase-Shell-Befehle entwerfen und Java Der Clientcode wird anhand einer einfachen Spracheingabe generiert, Zeilenschlüssel-Designs werden vorgeschlagen und Scanfilter erläutert. Maschinelles Lernen trägt ebenfalls zur Leistungsoptimierung bei, indem es häufig genutzte Bereiche vorhersagt. Dennoch sollte jede generierte Abfrage von einem Entwickler überprüft werden.

Ja. GitHub-Copilot kann HBase Put-, Get- und Scan-Snippets generieren in Java oder die Shell aus einem kurzen Kommentar, einschließlich Bytes.toBytes-Aufrufen und Scan-Filtern. RevPrüfen Sie vor dem Ausführen die Ausgabe auf den korrekten Tabellennamen, die Spaltenfamilien und die aktuelle Tabellen-API.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: