Приклад запиту HBase: команди put(), get() та scan()
⚡ Розумний підсумок
Команди HBase put, get та scan – це основні команди для запису та читання даних, що дозволяють зберігати значення комірки по рядках та стовпцях, отримувати дані з одного рядка або переглядати багато рядків з оболонки. Java API.

Запис даних у таблицю 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», як показано на скріншоті нижче.
Припустимо, що таблиця «guru99» має посилання на таблицю, таке як g. Ви також можете виконати команду для посилання на таблицю ось так:
hbase> g.put 'guru99', 'r1', 'c1', 'value', 10
Вивід виглядає, як показано на скріншоті вище, після введення значень у “guru99”.
Читання даних із таблиці HBase: Shell
У цьому розділі ми перевіряємо наступне в HBase оболонка:
- Значення, що вставляються в таблицю HBase «guru99».
- Назви стовпців зі значеннями, що містяться в таблиці HBase guru99.
У наведеному нижче списку результатів сканування перелічено кожне значення, вставлене в «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 відображатимуться за допомогою цієї команди, як показано на знімку екрана нижче.
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”:
Зі скріншоту вище:
- Коли ми створюємо конфігурацію HBase, вона вказує на будь-які конфігурації, які ми встановили у файлах hbase-site.xml та hbase-default.xml під час встановлення HBase.
- Створення таблиці “guru99” за допомогою методу HTable.
- Додавання рядка1 до таблиці “guru99”.
- Вказування назв стовпців «освіта» та «проекти» та вставка значень у назви стовпців у відповідному рядку1. Вставлені тут значення: BigData та «Посібники з HBase».
Читання даних із таблиці HBase: Java API
Які б значення ми не розмістили в таблиці HBase у попередньому розділі, тут ми збираємося отримати та відобразити ці значення.
Вивід консолі нижче показує дані, що зчитуються з таблиці 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 залишається незмінною.





