hive 0.14: невозможно вставить данные в поддерживаемую ACID таблицу без сегментов

В hive 0.14 у меня есть таблица с транзакцией, поддерживаемой ACID.

create table HiveTest 
(EmployeeID Int,FirstName String,Designation String,
Salary Int,Department String) 
clustered by (department) into 3 buckets 
stored as orc TBLPROPERTIES ('transactional'='true');

OK. Я могу вставить данные в эту таблицу:

from stagingtbl 
insert into table HiveTest 
select employeeid,firstname,designation,salary,department;

Но если я не использую ведра с этой таблицей:

create table HiveTest 
(EmployeeID Int,FirstName String,Designation String,
Salary Int,Department String)  
stored as orc TBLPROPERTIES ('transactional'='true');

Я получаю сообщение об ошибке при вставке данных: таблицы не разделены на сегменты.

Итак, мы должны создать таблицу с сегментами в поддержке транзакций ACID для вставки данных?
Можем ли мы использовать какие-либо другие способы вставки данных в таблицу с поддержкой ACID?


person voxter    schedule 01.01.2015    source источник


Ответы (2)


Как указано в разделе «Ограничения» в Hive Transactions:

  • BEGIN, COMMIT и ROLLBACK пока не поддерживаются. Все языковые операции автоматически фиксируются. План состоит в том, чтобы поддерживать их в будущем выпуске.
  • В этом первом выпуске поддерживается только формат файла ORC. Эта функция была построена таким образом, что транзакции могут использоваться любым форматом хранения, который может определять, как обновления или удаления применяются к базовым записям (в основном, которые имеют явный или неявный идентификатор строки), но до сих пор работа по интеграции была выполнена только для ОРЦ.
  • По умолчанию транзакции отключены. См. раздел «Конфигурация» ниже для обсуждения того, какие значения необходимо установить для его настройки.
  • Для использования этих функций таблицы должны быть разделены на сегменты. Таблицы в той же системе, не использующие транзакции и ACID, не нуждаются в сегментировании.
  • В настоящее время поддерживается только изоляция на уровне моментальных снимков. Когда данный запрос запускается, ему будет предоставлен согласованный снимок данных. Не поддерживается грязное чтение, зафиксированное чтение, повторяемое чтение или сериализуемое. С введением BEGIN цель состоит в том, чтобы поддерживать изоляцию моментальных снимков на время транзакции, а не только один запрос. Другие уровни изоляции могут быть добавлены в зависимости от запросов пользователей.
  • Существующие менеджеры блокировок ZooKeeper и in-memory несовместимы с транзакциями. Нет намерения решать этот вопрос. См. Базовый дизайн ниже для обсуждения того, как хранятся блокировки для транзакций.
person Remus Rusanu    schedule 01.01.2015
comment
Большой вопрос здесь, почему? зачем нам в первую очередь нужны ведра, чтобы иметь ACID, особенно если таблица уже разделена. - person Gherbi Hicham; 11.09.2019

Какую версию улья вы используете? Hive 0.13 поддерживает свойства транзакций, но частично как атомарность , согласованность и долговечность, но не изоляцию. Hive 0.14 Поддерживает, но только для таблиц с сегментами, а таблица должна храниться в формате ORC. Убедитесь, что вы настроили свой файл hive-site.xml в HIVE_HOME для поддержки параллелизма и динамических разделов, а также остальных свойств.

person Mithun    schedule 14.04.2016