Primjer HBase upita: naredbe put(), get() i scan()

⚡ Pametni sažetak

HBase naredbe put, get i scan su osnovne naredbe za pisanje i čitanje podataka, omogućujući vam pohranjivanje vrijednosti ćelije po retku i stupcu, dohvaćanje jednog retka ili pregledavanje više redaka iz ljuske ili Java API-ja.

  • ✍️ Napišite sa stavkom: Naredba put pohranjuje vrijednost u tablicu, redak, stupac i opcionalnu vremensku oznaku.
  • 🔍 Čitajte s get: Naredba get vraća jedan redak ili ćeliju s opcijama TIMERANGE, VERSIONS i FILTERS.
  • 📜 Pregledaj skeniranjem: Naredba scan navodi više redaka i njihovih vrijednosti stupaca u tablici.
  • Java Apis: Iste operacije se izvode u Java korištenjem Put, Get, Scan i pomoćne klase Bytes.
  • 🧬 koordinate: Svaka vrijednost je adresirana ključem retka, obitelji stupaca i kvalifikatorom stupca.
  • 🤖 Pomoć umjetne inteligencije: AI asistenti izrađuju kod za stavljanje, dohvaćanje i skeniranje te predlažu učinkovite dizajne tipki redova.

HBase naredbe upita put(), get() i scan() u ljusci i Java

Zapišite podatke u HBase tablicu: Shell

Ovi primjeri pretpostavljaju da je HBase instalirano i pokrenuto, HBase ljuska je otvorena i tablica pod nazivom guru99 već postoji s rubrikom obitelji, obrazovanje i projekti.

Naredba put se koristi za pohranjivanje podataka u tablicu.

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

Ova naredba se koristi za sljedeće stvari:

  • Stavit će 'vrijednost' ćelije u definiranu ili specificiranu tablicu ili redak ili stupac.
  • Opcionalno će koordinirati vremensku oznaku.

Na primjer, ovdje stavljamo vrijednosti u tablicu „guru99“ pod redak r1 i stupac c1:

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

U tablicu „guru99“ smjestili smo tri vrijednosti, 10, 15 i 30, kao što je prikazano na snimci zaslona ispod.

Naredba HBase shell put umeće vrijednosti 10, 15 i 30 u tablicu guru99

Pretpostavimo da tablica „guru99“ ima referencu tablice, kao što je g. Naredbu možete pokrenuti i na referenci tablice, ovako:

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

Izlaz se pojavljuje kao što je prikazano na gornjoj snimci zaslona nakon što se vrijednosti unesu u "guru99".

Čitanje podataka iz HBase tablice: Shell

U ovom odjeljku provjeravamo sljedeće HBase ljuska:

  • Vrijednosti koje se ubacuju u HBase tablicu „guru99“.
  • Nazivi stupaca s vrijednostima prisutnim u HBase tablici guru99.

Izlaz skeniranja u nastavku navodi svaku vrijednost umetnutu u „guru99“, zajedno s nazivima redaka i stupaca:

Izlaz naredbe HBase shell scan koji navodi vrijednosti redaka i stupaca u tablici guru99

Iz gornje snimke zaslona možemo zaključiti sljedeće:

  • Ako pokrenemo naredbu "scan" u HBase ljusci, prikazat će umetnute vrijednosti u "guru99" na sljedeći način.
  • U HBase ljusci će se prikazati vrijednosti koje je umetnuo naš kod, s nazivima stupaca i redaka.
  • Ovdje možemo vidjeti da su umetnuti nazivi stupaca „obrazovanje“ i „projekti“.
  • U spomenute stupce umetnute su vrijednosti „BigData“ i „HBase Tutorials“.

Također možete koristiti naredbu get za čitanje podataka iz tablice.

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

Ovdje dodatni parametri uključuju TIMERANGE, TIMESTAMP, VERSIONS i FILTERS. Pomoću ove naredbe dobivate sadržaj retka ili ćelije prisutan u tablici. Možete dodati dodatne parametre, kao što su TIMESTAMP, TIMERANGE, VERSIONS ili FILTERS, za dohvaćanje određenog sadržaja retka ili ćelije. Tablica u nastavku sažima ove parametre:

Parametar Svrha
VREMENSKI RASPON Vraća ćelije čija vremenska oznaka pada unutar početnog i završnog vremena.
VREMENSKI KAMP Vraća samo verziju ćelije pohranjenu u točno određenom vremenskom žigu.
VERZIJE Postavlja koliko verzija ćelije treba vratiti (zadano je 1).
FILTARA Primjenjuje filtar za ograničavanje vraćanja redaka ili stupaca.
KOLONA Ograničava rezultat na određene obitelji stupaca ili kvalifikatore.

Evo nekoliko praktičnih primjera naredbe get:

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

Za tablicu „guru99“, vrijednosti retka r1 i stupca c1 prikazat će se pomoću ove naredbe, kao što je prikazano na snimci zaslona u nastavku.

HBase shell get naredba vraća jedan redak r1 iz tablice guru99

hbase> get 'guru99', 'r1'

Za tablicu „guru99“, vrijednosti retka r1 bit će prikazane pomoću ove naredbe.

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

Za tablicu „guru99“, vrijednosti retka r1 u vremenskom rasponu od ts1 do ts2 bit će prikazane pomoću ove naredbe.

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

Za tablicu „guru99“, vrijednosti retka r1 i obitelji stupaca c1, c2 i c3 prikazat će se pomoću ove naredbe.

Pisanje podataka u HBase tablicu: JAVA API

U ovom koraku ćemo zapisati podatke u HBase tablicu „guru99“.

Prvo moramo napisati kod za umetanje i dohvaćanje vrijednosti iz HBase-a, koristeći program HBaseLoading.java. Za stvaranje i umetanje vrijednosti u tablicu na razini stupca, kod se piše kao što je prikazano u nastavku.

Snimka zaslona u nastavku prikazuje Java kod koji gradi HBase konfiguraciju i ubacuje vrijednosti u "guru99":

Java kod za stvaranje HBase konfiguracije i umetanje vrijednosti pomoću Put API-ja

Iz gornje snimke zaslona:

  • Kada stvaramo HBase konfiguraciju, ona pokazuje na konfiguracije koje smo postavili u datotekama hbase-site.xml i hbase-default.xml tijekom instalacije HBase-a.
  • Izrada tablice „guru99“ korištenjem HTable metode.
  • Dodavanje retka 1 u tablicu „guru99“.
  • Određivanje naziva stupaca „obrazovanje“ i „projekti“ te umetanje vrijednosti u nazive stupaca u odgovarajućem retku 1. Ovdje umetnute vrijednosti su BigData i „HBaseTutoriali“.

Čitaj podatke iz HBase tablice: Java API

Koje god vrijednosti smo stavili u HBase tablicu u gornjem odjeljku, ovdje ćemo ih dohvatiti i prikazati.

Izlaz konzole u nastavku prikazuje podatke koji se čitaju iz HBase tablice „guru99“:

Java čitanje izlaza iz konzole, obrazovanje i projekti, vrijednosti stupaca iz HBase tablice guru99

Za dohvaćanje rezultata pohranjenih u "guru99":

  • Ovdje ćemo dohvatiti vrijednosti koje su pohranjene u obiteljima stupaca, odnosno „obrazovanje“ i „projekti“.
  • Pomoću naredbe "get" dohvatit ćemo pohranjene vrijednosti u HBase tablici.
  • Rezultati skeniranja pomoću naredbe "scan". Vrijednosti pohranjene u retku 1 prikazat će se na konzoli.

Nakon što je kod napisan, pokrećete Java primjena kao ovo:

Desni klik na HBaseLoading.java -> Pokreni kao -> Java Primjena.

Nakon pokretanja "HBaseLoading.java", vrijednosti se ubacuju u "guru99" u svakom stupcu u HBase-u, a u istom programu mogu se i dohvaćati vrijednosti.

Evo kompletnog koda:

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

Napomena o verzijama API-ja: Gornji primjer koristi klasu HTable i njezinu metodu add(), koje odražavaju stariji HBase klijentski API. Od HBase 1.0, HTable je zastario. Moderni kod dobiva tablicu putem ConnectionFactory.createConnection(…).getTable(…) i gradi Put s addColumn() umjesto add(). Logika put, get i scan ostaje ista.

Pitanja i odgovori

Naredba get dohvaća jedan redak prema ključu retka i brzo vraća rezultat. Naredba scan čita više redaka sekvencijalno u tablici ili rasponu ključeva, opcionalno filtriranih prema stupcima ili vremenu. Koristite naredbu get za pojedinačne pretrage, a scan za pregledavanje ili izvoz više redaka.

Obitelj stupaca je imenovana skupina stupaca pohranjenih zajedno i definiranih prilikom stvaranja tablice. Kvalifikator stupca je pojedinačni naziv stupca unutar te obitelji, kao što je obrazovanje:stupac1. Obitelji moraju postojati u shemi; kvalifikatori se mogu slobodno dodavati prilikom pisanja.

Upotrijebite naredbu delete za uklanjanje jedne ćelije, na primjer delete 'guru99', 'r1', 'c1'. Upotrijebite naredbu deleteall za uklanjanje cijelog retka: deleteall 'guru99', 'r1'. Da biste potpuno ispraznili tablicu, onemogućite je, a zatim pokrenite naredbu truncate 'guru99', koja je briše i ponovno stvara.

HBase čuva više verzija svake ćelije s vremenskim oznakama. Broj zadržanih podataka postavlja se po obitelji stupaca atributom VERSIONS, koji je zadano postavljen na 1. Dodajte {VERSIONS => 3} funkciji get ili scan za vraćanje nekoliko verzija ili TIMESTAMP za dohvaćanje jedne točne verzije.

Pokrenite popis da biste vidjeli svaku tablicu u HBaseu. Pokrenite count 'guru99' da biste prebrojali retke u tablici, opcionalno s INTERVALOM za napredak. Koristite describe 'guru99' za pregled obitelji stupaca i status 'simple' za provjeru zdravlja klastera.

HBase nema izvorni SQL, ali Apache Phoenix dodaje SQL sloj koji kompilira upite u izvorne operacije put, get i scan. Podržava poznatu sintaksu SELECT, UPSERT i JOIN, što olakšava HBaseu postavljanje upita za timove koji već tečno poznaju SQL.

Pomoćnici za kodiranje umjetne inteligencije i veliki jezični modeli mogu izrađivati ​​naredbe HBase ljuske i Java klijentski kod iz upita na jednostavnom jeziku, predložiti dizajne tipki redaka i objasniti filtere skeniranja. Strojno učenje također pomaže u podešavanju performansi predviđanjem vrućih područja, iako bi inženjer trebao provjeriti svaki generirani upit.

Da. GitHub kopilot može generirati HBase put, get i scan isječke u Java ili ljusku iz kratkog komentara, uključujući pozive Bytes.toBytes i filtere Scan. RevPrije pokretanja pogledajte izlaz za ispravan naziv tablice, obitelji stupaca i trenutni Table API.

Sažmite ovu objavu uz: