Пример запроса к 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 put(), get() и scan() в командной оболочке и Java

Запись данных в таблицу HBase: Shell

В этих примерах предполагается, что HBase — это Установлено и работаетОболочка HBase открыта, и таблица с именем guru99 Уже существует раздел, посвященный семейному образованию и проектам.

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

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

Эта команда используется для следующих целей:

  • Он поместит «значение» ячейки в определенную или указанную таблицу, строку или столбец.
  • При желании можно добавить временную метку.

Например, здесь мы помещаем значения в таблицу «guru99» в строку r1 и столбец c1:

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

В таблицу «guru99» мы внесли три значения: 10, 15 и 30, как показано на скриншоте ниже.

Команда 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, содержащий список значений строк и столбцов в таблице 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 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 и вставляющий значения с помощью API Put.

На скриншоте выше:

  • При создании конфигурации 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(), которые отражают старый API клиента HBase. Начиная с HBase 1.0, класс HTable устарел. Современный код получает объект Table через ConnectionFactory.createConnection(…).getTable(…) и формирует объект Put с помощью addColumn() вместо add(). Логика операций put, get и scan остается неизменной.

Часто задаваемые вопросы (FAQ)

Команда `get` извлекает одну строку по ее ключу и быстро возвращает результат. Команда `scan` считывает множество строк последовательно по таблице или диапазону ключей, при необходимости фильтруя по столбцам или времени. Используйте `get` для поиска отдельных строк, а `scan` — для просмотра или экспорта нескольких строк.

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

Для удаления одной ячейки используйте команду delete, например, delete 'guru99', 'r1', 'c1'. Для удаления всей строки используйте команду deleteall: deleteall 'guru99', 'r1'. Чтобы полностью очистить таблицу, отключите ее, а затем выполните команду truncate 'guru99', которая удалит и создаст ее заново.

HBase хранит несколько версий каждой ячейки с меткой времени. Количество сохраняемых версий устанавливается для каждого семейства столбцов атрибутом VERSIONS, который по умолчанию равен 1. Добавьте {VERSIONS => 3} к запросу или сканированию, чтобы получить несколько версий, или TIMESTAMP, чтобы получить одну точную версию.

Выполните команду `run list`, чтобы увидеть все таблицы в HBase. Выполните команду `run count 'guru99'`, чтобы подсчитать количество строк в таблице, при необходимости указав интервал для отображения прогресса. Используйте команду `describe 'guru99'`, чтобы просмотреть семейства столбцов, и команду `status 'simple'`, чтобы проверить работоспособность кластера.

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

Искусственный интеллект, используемый в качестве помощника в программировании, и большие языковые модели могут создавать команды оболочки HBase и Java Клиентский код, полученный из командной строки на простом языке, предлагает варианты расположения ключей строк и объясняет фильтры сканирования. Машинное обучение также помогает оптимизировать производительность, прогнозируя «горячие» области, хотя каждый сгенерированный запрос должен быть проверен инженером.

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

Подведем итог этой публикации следующим образом: