Eksempel på HBase-spørring: put(), get() og scan()-kommandoer

⚡ Smart oppsummering

HBase put, get og scan er kjernekommandoene for å skrive og lese data, og lar deg lagre en celleverdi rad for rad, hente en enkelt rad eller bla gjennom mange rader fra skallet eller Java API.

  • ✍️ Skriv med put: `put`-kommandoen lagrer en verdi i en tabell, rad, kolonne og et valgfritt tidsstempel.
  • 🔍 Les med get: get-kommandoen returnerer en enkelt rad eller celle, med alternativene TIMERANGE, VERSIONS og FILTERS.
  • 📜 Bla gjennom med skanning: Skannekommandoen viser mange rader og kolonneverdiene deres på tvers av en tabell.
  • Java API: De samme operasjonene kjører i Java ved hjelp av Put, Get, Scan og hjelpeklassen Bytes.
  • 🧬 koordinater: Hver verdi adresseres av radnøkkel, kolonnefamilie og kolonnekvalifikator.
  • 🤖 AI-assistanse: AI-assistenter utarbeider put-, get- og skannerkode og foreslår effektive radnøkkeldesign.

HBase put(), get() og scan() spørrekommandoer i skall og Java

Skriv data til HBase-tabell: Shell

Disse eksemplene antar at HBase er installert og kjører, HBase-skallet er åpent, og en tabell med navnet guru99 finnes allerede med kolonnefamiliene utdanning og prosjekter.

Put-kommandoen brukes til å lagre data i en tabell.

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

Denne kommandoen brukes til følgende ting:

  • Det vil sette en celle 'verdi' ved en definert eller spesifisert tabell eller rad eller kolonne.
  • Den vil eventuelt koordinere et tidsstempel.

For eksempel, her plasserer vi verdier i tabellen «guru99» under rad r1 og kolonne c1:

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

Vi har plassert tre verdier, 10, 15 og 30, i tabellen «guru99», som vist på skjermbildet nedenfor.

HBase shell put-kommandoen setter inn verdiene 10, 15 og 30 i tabellen guru99

Anta at tabellen «guru99» har en tabellreferanse, for eksempel g. Du kan også kjøre kommandoen på tabellreferansen, slik:

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

Utdataene vises som vist på skjermbildet ovenfor etter at verdier er plassert i «guru99».

Les data fra HBase Table: Shell

I denne delen sjekker vi følgende i HBase skall:

  • Verdier som settes inn i HBase-tabellen «guru99».
  • Kolonnenavn med verdiene som finnes i HBase-tabellen guru99.

Skanneutdataene nedenfor viser alle verdier som er satt inn i «guru99», sammen med rad- og kolonnenavnene:

HBase shell scan-kommandoutdata som viser rad- og kolonneverdier i tabellen guru99

Fra skjermbildet ovenfor kan vi utlede følgende:

  • Hvis vi kjører kommandoen «scan» i HBase-skallet, vil den vise de innsatte verdiene i «guru99» som følger.
  • I HBase-skallet vil den vise verdiene som er satt inn av koden vår, med kolonne- og radnavnene.
  • Her kan vi se at kolonnenavnene som er satt inn er «utdanning» og «prosjekter».
  • Verdiene som settes inn er «BigData» og «HBase Tutorials» i de nevnte kolonnene.

Du kan også bruke get-kommandoen til å lese data fra en tabell.

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

Her inkluderer tilleggsparametrene TIMERANGE, TIMESTAMP, VERSIONS og FILTERS. Ved å bruke denne kommandoen får du en rad eller celleinnholdet som finnes i tabellen. Du kan legge til tilleggsparametre, for eksempel TIMESTAMP, TIMERANGE, VERSIONS eller FILTERS, for å hente innhold fra en bestemt rad eller celle. Tabellen nedenfor oppsummerer disse parameterne:

Parameter Formål
TIDSOMRÅDE Returnerer celler med tidsstempel som faller innenfor et start- og sluttidspunkt.
TIMESTAMP Returnerer bare celleversjonen som er lagret med et nøyaktig tidsstempel.
VERSJONER Angir hvor mange versjoner av en celle som skal returneres (standard er 1).
FILTER Bruker et filter for å begrense hvilke rader eller kolonner som returneres.
KOLONNE Begrenser resultatet til bestemte kolonnefamilier eller kvalifikatorer.

Her er noen eksempler på hvordan get-kommandoen fungerer:

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

For tabellen «guru99» vil verdiene for rad r1 og kolonne c1 vises ved bruk av denne kommandoen, som vist på skjermbildet nedenfor.

HBase shell get-kommando returnerer en enkelt rad r1 fra tabellen guru99

hbase> get 'guru99', 'r1'

For tabellen «guru99» vil rad r1-verdier vises ved hjelp av denne kommandoen.

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

For tabellen «guru99» vil rad r1-verdier i tidsområdet ts1 til ts2 vises ved hjelp av denne kommandoen.

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

For tabellen «guru99» vil verdier for rad r1 og kolonnefamiliene c1, c2 og c3 vises ved hjelp av denne kommandoen.

Skriv data til HBase-tabell: JAVA API

I dette trinnet skal vi skrive data inn i HBase-tabellen «guru99».

Først må vi skrive kode for å sette inn og hente verdier fra HBase ved hjelp av programmet HBaseLoading.java. For å opprette og sette inn verdier i en tabell på kolonnenivå, koder du som vist nedenfor.

Skjermbildet nedenfor viser Java kode som bygger HBase-konfigurasjonen og setter inn verdier i «guru99»:

Java kode som oppretter en HBase-konfigurasjon og setter inn verdier med Put API-et

Fra skjermbildet ovenfor:

  • Når vi oppretter HBase-konfigurasjonen, peker den til konfigurasjonene vi anga i filene hbase-site.xml og hbase-default.xml under HBase-installasjonen.
  • Oppretting av tabellen «guru99» ved hjelp av HTable-metoden.
  • Legger til rad1 i tabellen «guru99».
  • Spesifiser kolonnenavnene «utdanning» og «prosjekter» og sett inn verdier i kolonnenavnene i den respektive rad1. Verdiene som settes inn her er Stor Data og «HBase-opplæringsprogrammer».

Les data fra HBase Table: Java API

Uansett hvilke verdier vi plasserte i HBase-tabellen i avsnittet ovenfor, skal vi her hente og vise disse verdiene.

Konsollutdataene nedenfor viser dataene som leses tilbake fra HBase-tabellen «guru99»:

Java konsollutdata som leser verdier for utdannings- og prosjektkolonner fra HBase-tabellen guru99

For å hente resultater lagret i «guru99»:

  • Her skal vi hente verdiene som er lagret i kolonnefamiliene, det vil si «utdanning» og «prosjekter».
  • Ved å bruke kommandoen «get» skal vi hente de lagrede verdiene i HBase-tabellen.
  • Skanner resultater ved hjelp av kommandoen «scan». Verdiene som er lagret i rad 1 vises på konsollen.

Når koden er skrevet, kjører du Java søknad som dette:

Høyreklikk på HBaseLoading.java -> Kjør som -> Java Applikasjon.

Etter å ha kjørt «HBaseLoading.java», settes verdiene inn i «guru99» i hver kolonne i HBase, og i det samme programmet kan den også hente verdier.

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

Merknad om API-versjoner: Eksemplet ovenfor bruker HTable-klassen og dens add()-metode, som gjenspeiler det eldre HBase-klient-API-et. Siden HBase 1.0 er HTable utdatert. Moderne kode henter en tabell gjennom ConnectionFactory.createConnection(…).getTable(…) og bygger en Put med addColumn() i stedet for add(). Logikken bak put, get og scan forblir den samme.

Spørsmål og svar

`get`-kommandoen henter én rad med radnøkkelen og returnerer raskt. `scan`-kommandoen leser mange rader sekvensielt på tvers av en tabell eller et nøkkelområde, eventuelt filtrert etter kolonner eller tid. Bruk `get` for enkeltoppslag og `scan` for å bla gjennom eller eksportere flere rader.

En kolonnefamilie er en navngitt gruppe av kolonner som er lagret sammen og definert når du oppretter tabellen. En kolonnekvalifikator er det individuelle kolonnenavnet i den familien, for eksempel utdanning:kol1. Familier må finnes i skjemaet; kvalifikatorer kan legges til fritt under skriving.

Bruk slettekommandoen for å fjerne én celle, for eksempel slette 'guru99', 'r1', 'c1'. Bruk deleteall for å fjerne en hel rad: deleteall 'guru99', 'r1'. For å tømme en tabell fullstendig, deaktiver den og kjør deretter avkort 'guru99', som sletter og gjenskaper den.

HBase lagrer flere tidsstemplede versjoner av hver celle. Antallet som beholdes angis per kolonnefamilie av VERSIONS-attributtet, som standard er 1. Legg til {VERSIONS => 3} i en get- eller scan-funksjon for å returnere flere versjoner, eller et TIMESTAMP for å hente én nøyaktig versjon.

Kjør listen for å se alle tabeller i HBase. Kjør tellingen 'guru99' for å telle radene i en tabell, eventuelt med et INTERVALL for fremdrift. Bruk beskriv 'guru99' for å se kolonnefamilier, og statusen 'enkel' for å sjekke klyngetilstanden.

HBase har ingen innebygd SQL, men Apache Phoenix legger til et SQL-lag som kompilerer spørringer til innebygde put-, get- og scan-operasjoner. Den støtter kjent SELECT-, UPSERT- og JOIN-syntaks, noe som gjør HBase enklere å spørre for team som allerede behersker SQL.

AI-kodingsassistenter og store språkmodeller kan utarbeide HBase-skallkommandoer og Java klientkode fra en ledetekst i et enkelt språk, foreslå radnøkkeldesign og forklare skannefiltre. Maskinlæring bidrar også til å finjustere ytelsen ved å forutsi aktive områder, selv om en ingeniør bør verifisere alle genererte spørringer.

Ja. GitHub Copilot kan generere HBase put-, get- og scan-snutter i Java eller skallet fra en kort kommentar, inkludert Bytes.toBytes-kall og skannefiltre. RevSe utdataene for riktig tabellnavn, kolonnefamilier og gjeldende tabell-API før du kjører den.

Oppsummer dette innlegget med: