#hadoop #hive #hbase
#hadoop #улей #hbase
Вопрос:
Я хочу понять, как Hbase внутренне обрабатывает дубликаты записей из файла. Чтобы поэкспериментировать с этим, я создал ВНЕШНЮЮ таблицу в hive со специфичными для HBase свойствами конфигурации, такими как свойства таблицы, SERDE, семейство столбцов. Я также должен создать таблицу в HBase с семейством столбцов, что я и сделал.
Я выполнил перезапись вставки в эту таблицу HIVE из исходной таблицы, в которой есть повторяющиеся записи. Под повторяющимися записями я подразумеваю следующее,
ID | Name | Surname
1 | Ritesh | Rai
1 | RiteshKumar | Rai
Теперь, после выполнения перезаписи вставки, я запросил свою таблицу HIVE с идентификатором 1, я получил вывод как (второй)
1 RiteshKumar Rai
Я хотел узнать, как HBase решает, какой из них обновляется? Это просто то, что он просто записывает данные последовательно. Последняя запись будет перезаписана и будет считаться последней? Или как это?
Заранее спасибо.
С уважением, Говинд
Ответ №1:
Вы на правильном пути!
HBase
модель данных можно рассматривать как «многомерную карту», и каждое значение ячейки связано с меткой времени (insertion_time по умолчанию):
row:column_family:column_qualifier:timestamp:value
ПРИМЕЧАНИЕ: временная метка связана с каждым отдельным значением, а не со всей строкой (это позволяет использовать несколько приятных функций)!
Во время чтения вы получите последние версии по умолчанию, если не указано иное. По умолчанию должно храниться 3 версии. Hbase выполняет «чтение слиянием» и возвращает последнее значение ячейки для каждой строки.
Пожалуйста, попробуйте это из вашей hbase-оболочки (на самом деле не проверялось перед публикацией):
put ‘table_name’, ‘1’, ‘f:name’, ‘Ritesh’
put ‘table_name’, ‘1’, ‘f:surname’, ‘Rai’
put ‘table_name’, ‘1’, ‘f:name’, ‘RiteshKumar’
put ‘table_name’, ‘1’, ‘f:surname’, ‘Rai’
put ‘table_name’, ‘1’, ‘f:other’, ‘Some other stuff’
// Data on 'disk' (that might just be the memstore for now) will look like this:
// 1:f:name:1234567890:‘Ritesh’
// 1:f:surname:1234567891:‘Rai’
// 1:f:name:1234567892:‘RiteshKumar’
// 1:f:surname:1234567893:‘Rai’
// 1:f:other:1234567894:‘Some other stuff’
// Now try... And you will get ‘RiteshKumar’, ‘Rai’, ‘Some other stuff’
get ‘table_name’, ‘1’
// To get the previous versions of the data use the following:
get ‘table_name’, ‘1’, {COLUMN => ‘f’, VERSIONS => 2}
Не забудьте ознакомиться с лучшими практиками проектирования схем
Комментарии:
1. возможно ли в этом случае получить предыдущее значение?