Eksempel på HBase-forespørgsel: put(), get() og scan()-kommandoer

⚡ Smart opsummering

HBase put, get og scan er kernekommandoerne til at skrive og læse data, og de giver dig mulighed for at gemme en celleværdi række for række, hente en enkelt række eller gennemse mange rækker fra skallen eller Java API.

  • ✍️ Skriv med put: Kommandoen put gemmer en værdi i en tabel, række, kolonne og et valgfrit tidsstempel.
  • 🔍 Læs med get: `get`-kommandoen returnerer en enkelt række eller celle med indstillingerne TIMERANGE, VERSIONS og FILTERS.
  • 📜 Gennemse med scanning: Scan-kommandoen viser mange rækker og deres kolonneværdier på tværs af en tabel.
  • Java API'er: De samme operationer kører i Java ved hjælp af Put, Get, Scan og hjælpeklassen Bytes.
  • 🧬 Koordinater: Hver værdi adresseres af rækkenøgle, kolonnefamilie og kolonnekvalifikator.
  • 🤖 AI-assistance: AI-assistenter udarbejder put-, get- og scanner kode og foreslår effektive række-nøgle-designs.

HBase put(), get() og scan() forespørgselskommandoer i shell og Java

Skriv data til HBase-tabel: Shell

Disse eksempler antager, at HBase er installeret og kører, HBase-skallen er åben, og en tabel med navnet guru99 findes allerede med kolonnefamilierne uddannelse og projekter.

Put-kommandoen bruges til at gemme data i en tabel.

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

Denne kommando bruges til følgende ting:

  • Det vil sætte en celle 'værdi' ved en defineret eller specificeret tabel eller række eller kolonne.
  • Den vil eventuelt koordinere et tidsstempel.

For eksempel placerer vi her værdier i tabellen “guru99” under række r1 og kolonne c1:

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

Vi har placeret tre værdier, 10, 15 og 30, i tabellen “guru99”, som vist på skærmbilledet nedenfor.

HBase shell put-kommandoen indsætter værdierne 10, 15 og 30 i tabellen guru99

Antag at tabellen “guru99” har en tabelreference, f.eks. g. Du kan også køre kommandoen på tabelreferencen, sådan her:

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

Outputtet vises som vist på skærmbilledet ovenfor efter at værdier er placeret i "guru99".

Læs data fra HBase-tabel: Shell

I dette afsnit undersøger vi følgende i HBase skal:

  • Værdier, der indsættes i HBase-tabellen “guru99”.
  • Kolonnenavne med de værdier, der findes i HBase-tabel guru99.

Scanningsoutputtet nedenfor viser alle værdier, der er indsat i "guru99", sammen med dens række- og kolonnenavne:

HBase shell scan-kommandooutput med en liste over rækker og kolonneværdier i tabellen guru99

Ud fra ovenstående skærmbillede kan vi udlede følgende:

  • Hvis vi kører kommandoen "scan" i HBase-shellen, vil den vise de indsatte værdier i "guru99" som følger.
  • I HBase-shellen vil den vise de værdier, der er indsat af vores kode, med kolonne- og rækkenavnene.
  • Her kan vi se, at de indsatte kolonnenavne er "uddannelse" og "projekter".
  • De indsatte værdier er "BigData" og "HBase Tutorials" i de nævnte kolonner.

Du kan også bruge kommandoen `get` til at læse data fra en tabel.

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

Her inkluderer de yderligere parametre TIMERANGE, TIMESTAMP, VERSIONS og FILTERS. Ved at bruge denne kommando får du en række eller celleindholdet i tabellen. Du kan tilføje yderligere parametre, såsom TIMESTAMP, TIMERANGE, VERSIONS eller FILTERS, for at hente en bestemt række eller celleindhold. Tabellen nedenfor opsummerer disse parametre:

Parameter Formål
TIDSINDHOLD Returnerer celler, hvis tidsstempel falder inden for et start- og et sluttidspunkt.
TIDSSTEMPEL Returnerer kun den celleversion, der er gemt med et præcist tidsstempel.
VERSIONER Angiver, hvor mange versioner af en celle der skal returneres (standardindstillingen er 1).
FILTRE Anvender et filter til at begrænse, hvilke rækker eller kolonner der returneres.
KOLONNE Begrænser resultatet til bestemte kolonnefamilier eller kvalifikatorer.

Her er nogle eksempler på brugen af ​​get-kommandoen:

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

For tabellen “guru99” vises værdierne for række r1 og kolonne c1 ved hjælp af denne kommando, som vist på skærmbilledet nedenfor.

HBase shell get-kommando returnerer en enkelt række r1 fra tabellen guru99

hbase> get 'guru99', 'r1'

For tabellen “guru99” vises række r1-værdier ved hjælp af denne kommando.

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

For tabellen “guru99” vises række r1-værdier i tidsintervallet ts1 til ts2 ved hjælp af denne kommando.

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

For tabellen “guru99” vises værdierne for række r1 og kolonnefamilierne c1, c2 og c3 ved hjælp af denne kommando.

Skriv data til HBase-tabel: JAVA API

I dette trin skal vi skrive data ind i HBase-tabellen “guru99”.

Først skal vi skrive kode til at indsætte og hente værdier fra HBase ved hjælp af programmet HBaseLoading.java. For at oprette og indsætte værdier i en tabel på kolonneniveau, koder du som vist nedenfor.

Skærmbilledet nedenfor viser Java kode, der bygger HBase-konfigurationen og indsætter værdier i “guru99”:

Java Kode til oprettelse af en HBase-konfiguration og indsættelse af værdier med Put API'en

Fra ovenstående skærmbillede:

  • Når vi opretter HBase-konfigurationen, peger den på de konfigurationer, vi har angivet i filerne hbase-site.xml og hbase-default.xml under HBase-installationen.
  • Oprettelse af tabellen “guru99” ved hjælp af HTable-metoden.
  • Tilføjer række1 til tabellen “guru99”.
  • Angivelse af kolonnenavnene "uddannelse" og "projekter" og indsættelse af værdier i kolonnenavnene i den respektive række1. De værdier, der indsættes her, er BigData og “HBaseTutorials”.

Læs data fra HBase-tabel: Java API

Uanset hvilke værdier vi har placeret i HBase-tabellen i afsnittet ovenfor, vil vi her hente og vise disse værdier.

Konsoloutputtet nedenfor viser de data, der læses tilbage fra HBase-tabellen "guru99":

Java Konsoloutput, der læser værdier for uddannelses- og projektkolonner fra HBase-tabel guru99

For at hente resultater gemt i “guru99”:

  • Her henter vi de værdier, der er gemt i kolonnefamilierne, dvs. "uddannelse" og "projekter".
  • Ved hjælp af kommandoen "get" henter vi de gemte værdier i HBase-tabellen.
  • Scanning af resultater ved hjælp af kommandoen "scan". De værdier, der er gemt i række 1, vises på konsollen.

Når koden er skrevet, kører du Java ansøgning sådan her:

Højreklik på HBaseLoading.java -> Kør som -> Java Ansøgning.

Efter at have kørt “HBaseLoading.java”, indsættes værdierne i “guru99” i hver kolonne i HBase, og i det samme program kan den også hente værdier.

Her er den komplette kode:

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

Bemærkning om API-versioner: Eksemplet ovenfor bruger HTable-klassen og dens add()-metode, som afspejler den ældre HBase-klient-API. Siden HBase 1.0 er HTable udfaset. Moderne kode henter en tabel via ConnectionFactory.createConnection(…).getTable(…) og bygger en Put med addColumn() i stedet for add(). Logikken bag put, get og scan forbliver den samme.

Ofte Stillede Spørgsmål

Kommandoen `get` henter én række ved hjælp af dens rækkenøgle og returnerer hurtigt. `scan`-kommandoen læser mange rækker sekventielt på tværs af en tabel eller et nøgleområde, eventuelt filtreret efter kolonner eller tid. Brug `get` til enkelte opslag og `scan` til at gennemse eller eksportere flere rækker.

En kolonnefamilie er en navngiven gruppe af kolonner, der er gemt sammen og defineret, når du opretter tabellen. En kolonnekvalifikator er det individuelle kolonnenavn i den pågældende familie, f.eks. uddannelse:kol1. Familier skal findes i skemaet; kvalifikatorer kan tilføjes frit på skrivetidspunktet.

Brug kommandoen delete til at fjerne én celle, for eksempel delete 'guru99', 'r1', 'c1'. Brug deleteall til at fjerne en hel række: deleteall 'guru99', 'r1'. For at tømme en tabel helt skal du deaktivere den og derefter køre truncate 'guru99', som sletter og genskaber den.

HBase gemmer flere tidsstemplede versioner af hver celle. Antallet, der bevares, indstilles pr. kolonnefamilie af VERSIONS-attributten, som som standard er 1. Tilføj {VERSIONS => 3} til en get- eller scan-funktion for at returnere flere versioner, eller et TIMESTAMP for at hente én præcis version.

Kør en liste for at se alle tabeller i HBase. Kør antallet 'guru99' for at tælle rækkerne i en tabel, eventuelt med et INTERVAL for status. Brug beskriv 'guru99' for at se kolonnefamilier og status 'simpel' for at kontrollere klyngens tilstand.

HBase har ingen native SQL, men Apache Phoenix tilføjer et SQL-lag, der kompilerer forespørgsler til native put-, get- og scan-operationer. Det understøtter den velkendte SELECT-, UPSERT- og JOIN-syntaks, hvilket gør HBase nemmere at forespørge på for teams, der allerede er flydende i SQL.

AI-kodningsassistenter og store sprogmodeller kan udarbejde HBase-shellkommandoer og Java klientkode fra en letforståelig prompt, foreslå række-nøgledesign og forklare scanningsfiltre. Maskinlæring hjælper også med at finjustere ydeevnen ved at forudsige aktive områder, selvom en ingeniør bør verificere hver genereret forespørgsel.

Ja. GitHub Copilot kan generere HBase put-, get- og scan-snippets i Java eller skallen fra en kort kommentar, inklusive Bytes.toBytes-kald og scanningsfiltre. RevSe outputtet for det korrekte tabelnavn, kolonnefamilier og den aktuelle tabel-API, før du kører den.

Opsummer dette indlæg med: