Приклад запиту 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.
  • 🧬 Координати: Кожне значення адресується ключем рядка, сімейством стовпців та кваліфікатором стовпця.
  • 🤖 Допомога ШІ: Асистенти штучного інтелекту створюють код для введення, отримання та сканування, а також пропонують ефективні дизайни ключів рядків.

Команди запитів HBase put(), get() та scan() в оболонці та Java

Запис даних у таблицю HBase: оболонка

У цих прикладах припускається, що 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», як показано на скріншоті нижче.

Команда HBase shell put вставляє значення 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 scan, що відображає значення рядків і стовпців у таблиці guru99

З наведеного вище скріншоту ми можемо зробити наступний висновок:

  • Якщо ми виконаємо команду «scan» в оболонці HBase, вона відобразить вставлені значення в «guru99» наступним чином.
  • У оболонці HBase будуть відображатися значення, вставлені нашим кодом, разом з іменами стовпців та рядків.
  • Тут ми бачимо вставлені назви стовпців «освіта» та «проекти».
  • У згадані стовпці вставлено значення «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 відображатимуться за допомогою цієї команди, як показано на знімку екрана нижче.

Команда get оболонки HBase повертає один рядок 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 та «Посібники з HBase».

Читання даних із таблиці 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(), які відображають старіший клієнтський API HBase. Починаючи з HBase 1.0, HTable є застарілим. Сучасний код отримує таблицю через 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 та Java клієнтський код із запиту простою мовою, пропонувати дизайн ключів рядків та пояснювати фільтри сканування. Машинне навчання також допомагає налаштувати продуктивність, прогнозуючи гарячі області, хоча інженер повинен перевіряти кожен згенерований запит.

Так. Копілот GitHub може генерувати фрагменти коду HBase put, get та scan у Java або оболонку з короткого коментаря, включаючи виклики Bytes.toBytes та фільтри Scan. RevПерегляньте вивід для правильної назви таблиці, сімейств стовпців та поточного API таблиць перед запуском.

Підсумуйте цей пост за допомогою: