HBase-kyselyesimerkki: put(), get() ja scan() -komennot

⚡ Älykäs yhteenveto

HBase-komennot put, get ja scan ovat datan kirjoittamisen ja lukemisen ydinkomentoja. Niiden avulla voit tallentaa solun arvon rivi- ja sarakekohtaisesti, hakea yhden rivin tai selata useita rivejä komentotulkissa tai Java API.

  • 🇧🇷 Kirjoita put-komennolla: Put-komento tallentaa arvon taulukkoon, riville, sarakkeeseen ja valinnaisesti aikaleimaan.
  • 🔍 Lue komennolla get: get-komento palauttaa yhden rivin tai solun, jossa on TIMERANGE-, VERSIONS- ja FILTERS-asetukset.
  • 📜 Selaa skannauksella: Skannauskomento listaa useita rivejä ja niiden sarakearvoja taulukossa.
  • ☕ Java API:t: Samat toiminnot suoritetaan Java käyttäen Put-, Get- ja Scan-operaattoreita sekä Bytes-apuluokkaa.
  • 🧬 koordinaatit: Jokaista arvoa käsitellään riviavaimen, sarakeperheen ja saraketarkenteen avulla.
  • 🤖 Tekoälyn apu: Tekoälyavustajat luonnostelevat put-, get- ja scan-koodia ja ehdottavat tehokkaita rivi-avainten malleja.

HBase put(), get() ja scan() -kyselykomennot komentotulkissa ja Java

Kirjoita tiedot HBase-taulukkoon: Shell

Näissä esimerkeissä oletetaan, että HBase on asennettu ja käynnissä, HBase-kuori on auki ja a taulukko nimeltä guru99 on jo olemassa perheet, koulutus ja projektit -sarakkeessa.

Put-komentoa käytetään tietojen tallentamiseen taulukkoon.

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

Tätä komentoa käytetään seuraaviin asioihin:

  • Se asettaa solun "arvon" määritettyyn tai määritettyyn taulukkoon tai riviin tai sarakkeeseen.
  • Se koordinoi valinnaisesti aikaleiman.

Esimerkiksi tässä sijoitamme arvoja taulukkoon “guru99” riville r1 ja sarakkeeseen c1:

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

Olemme sijoittaneet kolme arvoa, 10, 15 ja 30, taulukkoon “guru99”, kuten alla olevassa kuvakaappauksessa näkyy.

HBase-komento syöttää arvot 10, 15 ja 30 taulukkoon guru99

Oletetaan, että taulukolla ”guru99” on taulukkoviittaus, kuten g. Voit myös suorittaa komennon taulukkoviittaukselle seuraavasti:

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

Tuloste näyttää yllä olevan kuvakaappauksen kaltaiselta, kun arvot on asetettu "guru99":ään.

Lue tiedot HBase-taulukosta: Shell

Tässä osiossa tarkistamme seuraavat asiat HBase-kuori:

  • HBase-taulukkoon “guru99” lisätyt arvot.
  • Sarakkeiden nimet ja niiden arvot ovat HBase-taulukossa guru99.

Alla oleva skannaustulos listaa kaikki "guru99":ään lisätyt arvot sekä niiden rivi- ja sarakenimet:

HBase-kuoren skannauskomennon tuloste, jossa luetellaan rivien ja sarakearvot taulukossa guru99

Yllä olevasta kuvakaappauksesta voimme päätellä seuraavaa:

  • Jos suoritamme "scan"-komennon HBase-kuoressa, se näyttää "guru99":ään lisätyt arvot seuraavasti.
  • HBase-komennossa se näyttää koodimme lisäämät arvot sarake- ja rivinimineen.
  • Tässä näemme lisättyjen sarakkeiden nimet ovat ”koulutus” ja ”projektit”.
  • Mainittuihin sarakkeisiin lisätyt arvot ovat ”BigData” ja ”HBase Tutorials”.

Voit myös käyttää get-komentoa tietojen lukemiseen taulukosta.

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

Tässä lisäparametreja ovat TIMERANGE, TIMESTAMP, VERSIONS ja FILTERS. Tällä komennolla saat taulukossa olevan rivin tai solun sisällön. Voit lisätä lisäparametreja, kuten TIMESTAMP, TIMERANGE, VERSIONS tai FILTERS, hakeaksesi tietyn rivin tai solun sisällön. Alla oleva taulukko esittää yhteenvedon näistä parametreista:

Parametri Tarkoitus
AIKAVÄLI Palauttaa solut, joiden aikaleima osuu aloitus- ja lopetusajan väliin.
AIKALEIMA Palauttaa vain tarkalla aikaleimalla tallennetun soluversion.
VERSIOISTA Määrittää, kuinka monta solun versiota palautetaan (oletusarvo on 1).
SUODATTIMET Käyttää suodatinta, joka rajoittaa palautettavien rivien tai sarakkeiden määrää.
KOLUMNI Rajoittaa tuloksen tiettyihin sarakeperheisiin tai tarkenteisiin.

Tässä on joitakin toimivia esimerkkejä get-komennon käytöstä:

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

Taulukolle ”guru99” rivin r1 ja sarakkeen c1 arvot näytetään tällä komennolla, kuten alla olevassa kuvakaappauksessa näkyy.

HBase-kuoren get-komento palauttaa yhden rivin r1 taulukosta guru99

hbase> get 'guru99', 'r1'

Taulukon ”guru99” rivin r1 arvot näytetään tällä komennolla.

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

Taulukolle ”guru99” rivin r1 arvot aikavälillä ts1–ts2 näytetään tällä komennolla.

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

Taulukolle ”guru99” rivin r1 ja sarakeperheiden c1, c2 ja c3 arvot näytetään tällä komennolla.

Kirjoita tiedot HBase-taulukkoon: JAVA API

Tässä vaiheessa kirjoitamme tietoja HBase-taulukkoon “guru99”.

Ensin meidän on kirjoitettava koodia arvojen lisäämiseksi ja hakemiseksi HBase-tietokannasta käyttämällä HBaseLoading.java-ohjelmaa. Arvojen luomiseksi ja lisäämiseksi taulukkoon saraketasolla koodataan alla olevan mukaisesti.

Alla oleva kuvakaappaus näyttää Java koodi, joka rakentaa HBase-kokoonpanon ja lisää arvot “guru99”:ään:

Java koodi, joka luo HBase-konfiguraation ja lisää arvoja Put API:n avulla

Yllä olevasta kuvakaappauksesta:

  • Kun luomme HBase-kokoonpanon, se viittaa kaikkiin kokoonpanoihin, jotka määritimme hbase-site.xml- ja hbase-default.xml-tiedostoissa HBase-asennuksen aikana.
  • Taulukon “guru99” luonti HTable-metodilla.
  • Lisätään rivi 1 taulukkoon “guru99”.
  • Määrittämällä sarakenimet ”koulutus” ja ”projektit” ja lisäämällä arvot sarakenimiin vastaavilla riveillä 1. Tähän lisättävät arvot ovat BigData ja ”HBase-oppaat”.

Lue tiedot HBase-taulukosta: Java API

Mitä tahansa arvoja sijoitimme HBase-taulukkoon yllä olevassa osiossa, tässä haemme ja näytämme kyseiset arvot.

Alla oleva konsolin tuloste näyttää HBase-taulukosta “guru99” luettavat tiedot:

Java konsolin tuloste lukee koulutus- ja projektisarakkeiden arvoja HBase-taulukosta guru99

"guru99"-kansioon tallennettujen tulosten hakeminen:

  • Tässä haemme sarakeperheisiin, eli "koulutus" ja "projektit", tallennetut arvot.
  • Käyttämällä "get"-komentoa noudamme HBase-taulukkoon tallennetut arvot.
  • Tulosten skannaus komennolla ”scan”. Riville 1 tallennetut arvot näkyvät konsolissa.

Kun koodi on kirjoitettu, suoritat komennon Java hakemus kuten tämä:

Napsauta hiiren kakkospainikkeella HBaseLoading.java-tiedostoa -> Suorita nimellä -> Java Sovellus.

Kun ”HBaseLoading.java” on suoritettu, arvot lisätään ”guru99”:n jokaiseen HBase-sarakkeeseen, ja samassa ohjelmassa se voi myös hakea arvoja.

Tässä on täydellinen koodi:

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

Huomautus API-versioista: Yllä olevassa esimerkissä käytetään HTable-luokkaa ja sen add()-metodia, jotka heijastavat vanhempaa HBase-asiakasohjelman API:a. HBase 1.0:sta lähtien HTable on vanhentunut. Nykyaikainen koodi hakee taulukon ConnectionFactory.createConnection(…).getTable(…)-metodilla ja muodostaa Put-taulukon addColumn()-metodilla add()-metodin sijaan. Put-, get- ja scan-metodien logiikka pysyy samana.

UKK

get-komento hakee yhden rivin sen riviavaimen perusteella ja palauttaa nopeasti. scan-komento lukee useita rivejä peräkkäin taulukosta tai avainalueelta, valinnaisesti suodatettuna sarakkeiden tai ajan mukaan. Käytä get-komentoa yksittäisiin hakuihin ja scan-komentoa useiden rivien selaamiseen tai viemiseen.

Sarakeperhe on nimetty joukko sarakkeita, jotka tallennetaan yhteen ja määritellään taulukon luomisen yhteydessä. Saraketarkenne on perheen sisällä olevan yksittäisen sarakkeen nimi, kuten education:col1. Perheiden on oltava olemassa kaavassa; tarkenteita voidaan lisätä vapaasti kirjoitusvaiheessa.

Poista yksi solu komennolla delete, esimerkiksi delete 'guru99', 'r1', 'c1'. Koko rivin poistamiseen käytä deleteall-komentoa: deleteall 'guru99', 'r1'. Tyhjennä taulukko kokonaan poistamalla se käytöstä ja suorittamalla sitten truncate 'guru99', joka poistaa ja luo sen uudelleen.

HBase säilyttää useita aikaleimattuja versioita jokaisesta solusta. Säilytettävä määrä asetetaan sarakeperhettä kohden VERSIONS-attribuutilla, jonka oletusarvo on 1. Lisää {VERSIONS => 3} get- tai scan-funktioon palauttaaksesi useita versioita tai TIMESTAMP hakeaksesi tarkalleen yhden version.

Suorita lista nähdäksesi kaikki HBase-taulukot. Suorita count 'guru99' laskeaksesi taulukon rivit, valinnaisesti käyttämällä INTERVAL-arvoa edistymisen seuraamiseksi. Käytä describe 'guru99' -komentoa tarkastellaksesi sarakeperheitä ja status 'simple' -komentoa tarkistaaksesi klusterin kunnon.

HBasessa ei ole natiivia SQL:ää, mutta Apache Phoenix lisää siihen SQL-kerroksen, joka kääntää kyselyt natiiveiksi put-, get- ja scan-operaatioiksi. Se tukee tuttua SELECT-, UPSERT- ja JOIN-syntaksia, mikä helpottaa HBasen kyselyjen tekemistä tiimeille, jotka jo osaavat SQL:ää.

Tekoälykoodausavustajat ja suuret kielimallit voivat laatia HBase-komentoja ja Java asiakaskoodia selkokielisestä kehotteesta, ehdottaa rivi-avainten malleja ja selittää skannaussuodattimia. Koneoppiminen auttaa myös suorituskyvyn hienosäätöön ennustamalla kuumia alueita, vaikka insinöörin tulisikin tarkistaa jokainen luotu kysely.

Kyllä. GitHub Copilot voi luoda HBase-put-, get- ja scan-koodinpätkiä Java tai lyhyen kommentin komentotulkki, mukaan lukien Bytes.toBytes-kutsuja ja skannaussuodattimia. RevTarkista oikean taulukon nimen, sarakeperheiden ja nykyisen Table API:n tuloste ennen sen suorittamista.

Tiivistä tämä viesti seuraavasti: