Пример за HBase заявка: команди put(), get() и scan()

⚡ Умно обобщение

HBase put, get и scan са основните команди за запис и четене на данни, които ви позволяват да съхранявате стойност на клетка по ред и колона, да извличате един ред или да преглеждате много редове от обвивката или... Java API.

  • ✍️ Напишете с put: Командата put съхранява стойност в таблица, ред, колона и опционален времеви отпечатък.
  • 🔍 Прочетете с get: Командата get връща един ред или клетка с опции TIMERANGE, VERSIONS и FILTERS.
  • 📜 Разглеждане със сканиране: Командата scan изброява много редове и техните стойности на колони в таблица.
  • Java API: Същите операции се изпълняват в Java използвайки Put, Get, Scan и помощния клас Bytes.
  • 🧬 Координати: Всяка стойност се адресира чрез ключ на ред, семейство колони и квалификатор на колона.
  • 🤖 Помощ от изкуствен интелект: Асистентите с изкуствен интелект изготвят код за поставяне, получаване и сканиране и предлагат ефективни дизайни на редове с ключове.

Команди за заявки put(), get() и scan() на HBase в shell и Java

Записване на данни в HBase таблица: Shell

Тези примери предполагат, че HBase е инсталиран и работещ, HBase обвивката е отворена и a таблица с име guru99 вече съществува с рубриката „Семейства, образование и проекти“.

Командата put се използва за съхраняване на данни в таблица.

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

Тази команда се използва за следните неща:

  • Той ще постави „стойност“ на клетка в определена или определена таблица, ред или колона.
  • По желание ще координира времеви печат.

Например, тук поставяме стойности в таблица „guru99“ под ред r1 и колона c1:

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

Поставили сме три стойности, 10, 15 и 30, в таблица „guru99“, както е показано на екранната снимка по-долу.

Командата put на HBase shell вмъква стойностите 10, 15 и 30 в таблицата guru99

Да предположим, че таблицата „guru99“ има препратка към таблица, например g. Можете също да изпълните командата върху препратката към таблицата, както следва:

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

Резултатът изглежда както е показано на екранната снимка по-горе, след като се въведат стойности в „guru99“.

Четене на данни от HBase таблица: Shell

В този раздел проверяваме следното в HBase обвивка:

  • Стойности, които се вмъкват в HBase таблицата „guru99“.
  • Имената на колоните със стойностите, налични в таблицата HBase guru99.

Резултатът от сканирането по-долу изброява всяка стойност, вмъкната в „guru99“, заедно с имената на редовете и колоните:

Изход от командата за сканиране на HBase shell, изброяваща стойностите на редове и колони в таблица guru99

От горната екранна снимка можем да заключим следното:

  • Ако изпълним командата „scan“ в HBase shell, тя ще покаже вмъкнатите стойности в „guru99“, както следва.
  • В HBase shell ще се покажат стойностите, вмъкнати от нашия код, с имената на колоните и редовете.
  • Тук можем да видим, че вмъкнатите имена на колоните са „образование“ и „проекти“.
  • Вмъкнатите стойности са „BigData“ и „HBase Tutorials“ в споменатите колони.

Можете също да използвате командата get, за да прочетете данни от таблица.

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

Тук допълнителните параметри включват TIMERANGE, TIMESTAMP, VERSIONS и FILTERS. С помощта на тази команда получавате съдържанието на ред или клетка, присъстващо в таблицата. Можете да добавите допълнителни параметри, като TIMESTAMP, TIMERANGE, VERSIONS или FILTERS, за да извлечете съдържанието на конкретен ред или клетка. Таблицата по-долу обобщава тези параметри:

Параметър Цел
ВРЕМЕВ ДИАПАЗОН Връща клетки, чийто времеви отпечатък попада в рамките на начален и краен час.
КЛАПОТО ЗА ЧАС Връща само версията на клетката, съхранена в точно определено време.
ВЕРСИИ Задава колко версии на клетка да се върнат (по подразбиране е 1).
ФИЛТРИ Прилага филтър, за да ограничи кои редове или колони се връщат.
КОЛОНА Ограничава резултата до конкретни семейства колони или квалификатори.

Ето някои работещи примери за командата get:

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

За таблица „guru99“, стойностите на ред r1 и колона c1 ще се покажат с помощта на тази команда, както е показано на екранната снимка по-долу.

HBase shell get команда, връщаща един ред r1 от таблицата guru99

hbase> get 'guru99', 'r1'

За таблица „guru99“, стойностите на ред r1 ще бъдат показани с помощта на тази команда.

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

За таблица „guru99“, стойностите на ред r1 във времевия диапазон ts1 до ts2 ще бъдат показани с помощта на тази команда.

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

За таблица „guru99“, стойностите на ред r1 и семейства колони c1, c2 и c3 ще бъдат показани с помощта на тази команда.

Записване на данни в HBase таблица: JAVA API

В тази стъпка ще запишем данни в HBase таблицата „guru99“.

Първо, трябва да напишем код за вмъкване и извличане на стойности от HBase, използвайки програмата HBaseLoading.java. За създаване и вмъкване на стойности в таблица на ниво колона, кодът е показан по-долу.

Снимката на екрана по-долу показва Java код, който изгражда HBase конфигурацията и вмъква стойности в „guru99“:

Java код, създаващ HBase конфигурация и вмъкващ стойности с Put API

От горната екранна снимка:

  • Когато създаваме HBase конфигурацията, тя сочи към конфигурациите, които сме задали във файловете hbase-site.xml и hbase-default.xml по време на инсталирането на HBase.
  • Създаване на таблица „guru99“ с помощта на метода HTable.
  • Добавяне на ред1 към таблица „guru99“.
  • Указване на имената на колоните „образование“ и „проекти“ и вмъкване на стойности в имената на колоните в съответния ред1. Вмъкнатите тук стойности са BigData и „HBaseTutorials“.

Прочетете данни от HBase таблица: Java API

Каквито и стойности да сме поставили в таблицата HBase в горния раздел, тук ще извлечем и покажем тези стойности.

Изходът от конзолата по-долу показва данните, които се четат обратно от HBase таблицата „guru99“:

Java конзолен изход, четене на образователни и проектни стойности на колони от HBase таблица guru99

За извличане на резултати, съхранени в „guru99“:

  • Тук ще извлечем стойностите, които се съхраняват в семействата на колоните, а именно „образование“ и „проекти“.
  • Използвайки командата „get“, ще извлечем съхранените стойности в таблицата HBase.
  • Резултати от сканиране с помощта на командата „scan“. Стойностите, съхранени в ред1, ще се покажат на конзолата.

След като кодът е написан, изпълнявате Java прилагане като този:

Щракнете с десния бутон върху HBaseLoading.java -> Изпълни като -> Java Приложение.

След изпълнение на „HBaseLoading.java“, стойностите се вмъкват в „guru99“ във всяка колона в HBase и в същата програма могат да се извличат и стойности.

Ето пълния код:

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

Забележка относно версиите на API: Горният пример използва класа HTable и неговия метод add(), които отразяват по-стария HBase клиентски API. От HBase 1.0 насам, HTable е остарял. Съвременният код получава Table чрез ConnectionFactory.createConnection(…).getTable(…) и изгражда Put с addColumn() вместо add(). Логиката на put, get и scan остава същата.

Въпроси и Отговори

Командата get извлича един ред по неговия ключ и връща бързо резултат. Командата scan прочита много редове последователно в таблица или диапазон от ключове, като по избор се филтрира по колони или време. Използвайте get за единични търсения, а scan за преглеждане или експортиране на множество редове.

Семейството колони е именувана група от колони, съхранявани заедно и дефинирани при създаването на таблицата. Квалификаторът на колоната е името на отделната колона в това семейство, например education:col1. Семействата трябва да съществуват в схемата; квалификаторите могат да се добавят свободно по време на писане.

Използвайте командата delete, за да премахнете една клетка, например delete 'guru99', 'r1', 'c1'. Използвайте deleteall, за да премахнете цял ред: deleteall 'guru99', 'r1'. За да изпразните напълно таблица, деактивирайте я и след това изпълнете truncate 'guru99', което я премахва и пресъздава.

HBase съхранява множество версии с времеви отпечатъци на всяка клетка. Броят запазени версии се задава за всяко семейство колони от атрибута VERSIONS, който по подразбиране е 1. Добавете {VERSIONS => 3} към get или scan, за да върнете няколко версии, или TIMESTAMP, за да извлечете една точна версия.

Изпълнете list, за да видите всяка таблица в HBase. Изпълнете count 'guru99', за да преброите редовете в таблица, по избор с INTERVAL за напредък. Използвайте describe 'guru99', за да видите семействата колони, и status 'simple', за да проверите състоянието на клъстера.

HBase няма вграден SQL, но Apache Phoenix добавя SQL слой, който компилира заявки в вградени операции put, get и scan. Той поддържа познатия синтаксис SELECT, UPSERT и JOIN, което улеснява заявките към HBase за екипи, които вече владеят SQL.

Асистентите за кодиране с изкуствен интелект и големите езикови модели могат да създават команди за HBase shell и Java клиентски код от подканата на разбираем език, предлага дизайн на редове с ключове и обяснява филтрите за сканиране. Машинното обучение също помага за оптимизиране на производителността чрез прогнозиране на горещи региони, въпреки че инженерът трябва да провери всяка генерирана заявка.

Да. Копилот на GitHub може да генерира HBase put, get и scan фрагменти в Java или обвивката от кратък коментар, включително извиквания на Bytes.toBytes и филтри за сканиране. RevПрегледайте изхода за правилното име на таблицата, семействата колони и текущия Table API, преди да го стартирате.

Обобщете тази публикация с: