Способы, которые я пробовал:
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, который я настроил. Спасибо!