HBase-frågeexempel: kommandona put(), get() och scan()

⚡ Smart sammanfattning

HBase put, get och scan är kärnkommandona för att skriva och läsa data, vilket låter dig lagra ett cellvärde rad för rad, hämta en enskild rad eller bläddra bland många rader från skalet eller Java API.

  • ✍️ Skriv med put: Kommandot put lagrar ett värde i en tabell, rad, kolumn och valfri tidsstämpel.
  • 🔍 Läs med get: Kommandot get returnerar en enda rad eller cell med alternativen TIMERANGE, VERSIONS och FILTERS.
  • 📜 Bläddra med skanning: Scan-kommandot listar många rader och deras kolumnvärden i en tabell.
  • Java API: Samma operationer körs i Java med hjälp av Put, Get, Scan och hjälpklassen Bytes.
  • 🧬 koordinater: Varje värde adresseras av radnyckel, kolumnfamilj och kolumnkvalificerare.
  • 🤖 AI-hjälp: AI-assistenter utarbetar put-, get- och skannar kod och föreslår effektiva radnycklardesigner.

HBase put(), get() och scan() frågekommandon i shell och Java

Skriv data till HBase Table: Shell

Dessa exempel antar att HBase är installerad och igång, HBase-skalet är öppet, och en tabell med namnet guru99 finns redan med kolumnfamiljerna utbildning och projekt.

Kommandot put används för att lagra data i en tabell.

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

Det här kommandot används för följande saker:

  • Det kommer att placera ett cell "värde" vid en definierad eller specificerad tabell eller rad eller kolumn.
  • Den kommer valfritt att koordinera en tidsstämpel.

Till exempel, här placerar vi värden i tabellen "guru99" under rad r1 och kolumn c1:

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

Vi har placerat tre värden, 10, 15 och 30, i tabellen "guru99", som visas på skärmbilden nedan.

HBase shell put-kommandot infogar värdena 10, 15 och 30 i tabellen guru99

Anta att tabellen "guru99" har en tabellreferens, till exempel g. Du kan också köra kommandot på tabellreferensen, så här:

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

Utdata visas som visas på skärmbilden ovan efter att värden har placerats i "guru99".

Läs data från HBase Table: Shell

I det här avsnittet kontrollerar vi följande i HBase skal:

  • Värden som infogas i HBase-tabellen "guru99".
  • Kolumnnamn med de värden som finns i HBase-tabellen guru99.

Skanningsutdata nedan listar alla värden som infogas i "guru99", tillsammans med dess rad- och kolumnnamn:

HBase shell scan-kommandoutdata som listar rad- och kolumnvärden i tabellen guru99

Från skärmdumpen ovan kan vi utläsa följande:

  • Om vi ​​kör kommandot ”scan” i HBase-skalet kommer det att visa de infogade värdena i ”guru99” enligt följande.
  • I HBase-skalet visas de värden som infogas av vår kod, med kolumn- och radnamnen.
  • Här kan vi se att kolumnnamnen som infogas är ”utbildning” och ”projekt”.
  • De värden som infogas är ”BigData” och ”HBase Tutorials” i de nämnda kolumnerna.

Du kan också använda kommandot get för att läsa data från en tabell.

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

Här inkluderar de ytterligare parametrarna TIMERANGE, TIMESTAMP, VERSIONS och FILTERS. Med det här kommandot hämtar du en rad eller cellinnehållet som finns i tabellen. Du kan lägga till ytterligare parametrar, såsom TIMESTAMP, TIMERANGE, VERSIONS eller FILTERS, för att hämta en viss rad eller cellinnehåll. Tabellen nedan sammanfattar dessa parametrar:

Parameter Syfte
TIDSINTERVALL Returnerar celler vars tidsstämpel faller inom en start- och sluttid.
TIDSSTÄMPEL Returnerar endast den cellversion som lagrats med en exakt tidsstämpel.
VERSIONER Anger hur många versioner av en cell som ska returneras (standardinställningen är 1).
FILTER Tillämpar ett filter för att begränsa vilka rader eller kolumner som returneras.
KOLUMN Begränsar resultatet till specifika kolumnfamiljer eller kvalificerare.

Här är några fungerande exempel på get-kommandot:

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

För tabellen "guru99" visas värden för rad r1 och kolumn c1 med det här kommandot, som visas på skärmbilden nedan.

HBase shell get-kommando som returnerar en enda rad r1 från tabellen guru99

hbase> get 'guru99', 'r1'

För tabellen “guru99” kommer rad r1-värden att visas med detta kommando.

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

För tabellen “guru99” kommer rad r1-värden i tidsintervallet ts1 till ts2 att visas med detta kommando.

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

För tabellen "guru99" visas värden för rad r1 och kolumnfamiljerna c1, c2 och c3 med detta kommando.

Skriv data till HBase-tabell: JAVA API

I det här steget ska vi skriva data till HBase-tabellen "guru99".

Först måste vi skriva kod för att infoga och hämta värden från HBase med hjälp av programmet HBaseLoading.java. För att skapa och infoga värden i en tabell på kolumnnivå kodar du enligt nedan.

Skärmdumpen nedan visar Java kod som bygger HBase-konfigurationen och infogar värden i "guru99":

Java kod som skapar en HBase-konfiguration och infogar värden med Put API:et

Från skärmdumpen ovan:

  • När vi skapar HBase-konfigurationen pekar den på de konfigurationer vi angav i filerna hbase-site.xml och hbase-default.xml under HBase-installationen.
  • Skapande av tabellen “guru99” med hjälp av HTable-metoden.
  • Lägger till rad1 i tabellen “guru99”.
  • Ange kolumnnamnen ”utbildning” och ”projekt” och infoga värden i kolumnnamnen på respektive rad1. Värdena som infogas här är BigData och ”HBaseTutorials”.

Läs data från HBase Table: Java API

Oavsett vilka värden vi placerade i HBase-tabellen i avsnittet ovan, kommer vi här att hämta och visa dessa värden.

Konsolutdata nedan visar data som läses tillbaka från HBase-tabellen "guru99":

Java konsolutdata som läser utbildnings- och projektkolumnvärden från HBase-tabellen guru99

För att hämta resultat lagrade i "guru99":

  • Här ska vi hämta värdena som är lagrade i kolumnfamiljerna, det vill säga ”utbildning” och ”projekt”.
  • Med hjälp av kommandot "get" ska vi hämta de lagrade värdena i HBase-tabellen.
  • Skannar resultat med kommandot ”scan”. Värdena som lagras i rad 1 visas i konsolen.

När koden är skriven kör du Java ansökan så här:

Högerklicka på HBaseLoading.java -> Kör som -> Java Ansökan.

Efter att ha kört "HBaseLoading.java" infogas värdena i "guru99" i varje kolumn i HBase, och i samma program kan den också hämta värden.

Här är hela 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();
}
}
}

Anmärkning om API-versioner: Exemplet ovan använder HTable-klassen och dess add()-metod, som återspeglar det äldre HBase-klient-API:et. Sedan HBase 1.0 är HTable föråldrad. Modern kod hämtar en tabell via ConnectionFactory.createConnection(…).getTable(…) och bygger en Put med addColumn() istället för add(). Logiken bakom put, get och scan förblir densamma.

Vanliga frågor

Kommandot get hämtar en rad med dess radnyckel och returnerar snabbt. Kommandot scan läser många rader sekventiellt över en tabell eller ett nyckelområde, valfritt filtrerat efter kolumner eller tid. Använd get för enskilda sökningar och scan för att bläddra eller exportera flera rader.

En kolumnfamilj är en namngiven grupp av kolumner som lagras tillsammans och definieras när du skapar tabellen. En kolumnkvalificerare är det individuella kolumnnamnet inom den familjen, till exempel utbildning:kol1. Familjer måste finnas i schemat; kvalificerare kan läggas till fritt vid skrivtillfället.

Använd kommandot delete för att ta bort en cell, till exempel delete 'guru99', 'r1', 'c1'. Använd deleteall för att ta bort en hel rad: deleteall 'guru99', 'r1'. För att tömma en tabell helt, inaktivera den och kör sedan truncate 'guru99', vilket tar bort och återskapar den.

HBase lagrar flera tidsstämplade versioner av varje cell. Antalet som behålls anges per kolumnfamilj av VERSIONS-attributet, vilket som standard är 1. Lägg till {VERSIONS => 3} till en get- eller scan-funktion för att returnera flera versioner, eller en TIMESTAMP för att hämta en exakt version.

Kör listan för att se varje tabell i HBase. Kör räknaren 'guru99' för att räkna raderna i en tabell, eventuellt med ett INTERVALL för förloppet. Använd beskriv 'guru99' för att visa kolumnfamiljer och statusen 'enkel' för att kontrollera klusterhälsan.

HBase har ingen inbyggd SQL, men Apache Phoenix lägger till ett SQL-lager som kompilerar frågor till inbyggda put-, get- och scan-operationer. Den stöder välbekant SELECT-, UPSERT- och JOIN-syntax, vilket gör HBase enklare att fråga för team som redan behärskar SQL flytande.

AI-kodningsassistenter och stora språkmodeller kan utarbeta HBase-shellkommandon och Java klientkod från en tydlig prompt, föreslå radnycklar och förklara skanningsfilter. Maskininlärning hjälper också till att finjustera prestanda genom att förutsäga heta regioner, även om en ingenjör bör verifiera varje genererad fråga.

Ja. GitHub Copilot kan generera HBase-kodavsnitt för att sätta in, hämta och skanna dem Java eller skalet från en kort kommentar, inklusive Bytes.toBytes-anrop och Scan-filter. RevVisa utdata för rätt tabellnamn, kolumnfamiljer och aktuellt tabell-API innan du kör det.

Sammanfatta detta inlägg med: