Вставить запись в таблицу улья Apache, используя pyodbc с ограничениями доступа - PullRequest
0 голосов
/ 23 октября 2019

Способы, которые я пробовал:

INSERT INTO some_table
PARTITION(some_col)
VALUES('some','meta','data')

Используемая мной учетная запись службы выдает мне pyodbc, эквивалентный Ошибка JDBC . Очевидно, что учетная запись службы не имеет доступа к чтению таблицы TMP (глупый imo).

jdbc:hive2://quickstart.cloudera:10000/def> insert into shipment_test values (1,'1111');
Error: Error while compiling statement: FAILED: SemanticException No valid privileges
 User writer does not have privileges for QUERY
 The required privileges: Server=server1->Db=default->Table=values__tmp__table__2->Column=tmp_values_col1->action=select; (state=42000,code=40000)

Я также пытался, но получил ошибку, потому что, по-видимому, только в 1.3 и 2.0 есть исправления, где вы можетеВСТАВИТЬ с ВЫБОР без FROM.

INSERT INTO some_table
PARTITION(some_col)
SELECT 'some', 'meta', 'data'

Я также пытался создать временную таблицу, вставить ее во вновь созданную временную таблицу, а затем вставить, используя select from temp table. Учетная запись службы не имеет доступа для создания временной таблицы.

Последний способ, который я попробовал, работает, но это больше похоже на хак:

INSERT INTO some table
PARTITION(some_col)
SELECT 'some', 'meta', 'data'
FROM some_table
LIMIT 1

Если я не LIMIT 1, он вставит количество строк, в настоящий момент находящихся в таблице. очередной раз. Это явно не оптимально.

Есть ли что-то, что я не пробовал, прежде чем просто запросить доступ к таблице TMP для учетной записи службы, которую я использую?

Важное примечание: первый запрос работает в Aginity, но не работает в pyodbc. Я считаю, что мы используем Hive 1.6. Я подключаюсь с помощью драйвера Hortonworks, который я настроил. Спасибо!

...