почему функция удаления не работает в оболочке улья? - PullRequest
1 голос
/ 20 апреля 2020

hive> delete from daily_case, где num_casedaily = 0;

FAILED: SemanticException [Ошибка 10294]: попытка выполнить обновление или удаление с помощью диспетчера транзакций, который не поддерживает эти операции.

thank Вы заранее

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Как @Chema объяснил ACID транзакции HIVE. Вы можете изменить свойство таблицы, чтобы разрешить транзакцию.

ИЛИ

Вы можете сделать следующее. При этом вам не нужно изменять свойства таблицы.

INSERT OVERWRITE INTO daily_case
SELECT * FROM daily_case WHERE num_casedaily <> 0;
0 голосов
/ 21 апреля 2020

Hive не поддерживает ACID-транзакции обычным способом. Вам понадобятся некоторые предварительные условия и непонятные ограничения транзакций ACID в Hive.

Вы можете просмотреть эту статью:

https://www.cloudera.com/tutorials/using-hive-acid-transactions-to-insert-update-and-delete-data/.html#operational -tools-for-acid

для получения дополнительной информации о транзакциях Hive.

Предварительные условия Диспетчер транзакций Hive должен иметь значение DbTxnManager SET hive.txn.manager = org. apache .had oop .hive.ql .lockmgr.DbTxnManager;

Нам нужно включить параллелизм SET hive.support.concurrency = true;

Как только мы установим вышеуказанные свойства, мы сможем вставить данные в любую таблицу. Для обновлений и удалений таблица должна быть объединена, а формат файла должен быть ИЛИ C или любой совместимый с ACID формат. Нам также нужно установить для транзакций свойства таблицы значение true TBLPROPERTIES ('транзакция' = 'истина');

ОБЗОР СВОЙСТВ

$ cd / etc / hive / conf

$ grep -i txn hive-site. xml

$ hive -e "SET;" | grep -i txn

$ beeline -u jdb c: hive2: // localhost: 10000 / training_retail

В качестве примера для создания таблицы транзакций в HIVE

SET hive.txn.manager;
hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager;

SET hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;

SET hive.support.concurrency=true;

SET hive.enforce.bucketing;
SET hive.enforce.bucketing=true;

SET hive.exec.dynamic.partition.mode;
hive.exec.dynamic.partition.mode=strict

SET hive.exec.dynamic.partition.mode=nonstrict;

SET hive.compactor.initiator.on;
SET hive.compactor.initiator.on=true;
-- A positive number
SET hive.compactor.worker.threads;
SET hive.compactor.worker.threads=1;

CREATE TABLE orders_transactional (
  order_id INT,
  order_date STRING,
  order_customer_id INT,
  order_status STRING
) CLUSTERED BY (order_id) INTO 8 BUCKETS
STORED AS ORC
TBLPROPERTIES("transactional"="true");

INSERT INTO orders_transactional VALUES
(1, '2013-07-25 00:00:00.0', 1000, 'COMPLETE');

INSERT INTO orders_transactional VALUES
(2, '2013-07-25 00:00:00.0', 2001, 'CLOSED'),
(3, '2013-07-25 00:00:00.0', 1500, 'PENDING'),
(4, '2013-07-25 00:00:00.0', 2041, 'PENDING'),
(5, '2013-07-25 00:00:00.0', 2031, 'COMPLETE');

UPDATE orders_transactional
  SET order_status = 'COMPLETE'
WHERE order_status = 'PENDING';

DELETE FROM orders_transactional
WHERE order_status <> 'COMPLETE';

SELECT *
FROM orders_transactional;

Надеюсь, это может быть полезно,

С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...