Почему sqoop пытается использовать SELECT С ПРЕДОСТАВЛЕНИЕМ?

#hadoop #hive #teradata

#hadoop #улей #teradata

Вопрос:

Я пытаюсь выполнить sqoop из базы данных teradata.

Я использовал следующий вызов:

 sqoop import --connect jdbc:teradata://<<ip>>/database=<<dbname>>,LOGMECH=<<logmech>> --connection-manager "com.cloudera.connector.teradata.TeradataManager" --username <<user>> -P  --target-dir <<targetdir>> --query 'SELECT * FROM  <<source-db>>.<<source-table>> WHERE $CONDITIONS sample 10'  --split-by  <<fieldname>> --hive-import --hive-database <<hivedb-target>>  --hive-table <<hivetable-target>>
  

И получаю следующую ошибку:

 16/10/12 22:31:23 ERROR tool.ImportTool: Encountered IOException running import job: com.teradata.connector.common.exception.ConnectorException: com.teradata.jdbc.jdbc_4.util.JDBCException: [Teradata Database] [TeraJDBC 15.00.00.11] [Error 3523] [SQLState 42000] An owner referenced by user does not have SELECT WITH GRANT OPTION access to <<source-db>>.<<source-table>>
  

Кто-нибудь может помочь с этой ошибкой?

Похоже, что sqoop пытается делегировать / назначить доступ к таблице.

Продуктом входной базы данных является Teradata

Версия входной базы данных 14.10

Версия драйвера jdbc — 15.0

Запущенная версия Sqoop: 1.4.6

Ответ №1:

Похоже <<user>> , у него есть SELECT разрешение <<sourcedb>>.<<sourcetable>> , которое, вероятно, является представлением в Teradata. <<sourcedb>> Требуется, чтобы специальная SELECT привилегия предоставлялась объектам, на которые ссылаются, <<sourcetable>> или базам данных, содержащим эти объекты.

GRANT SELECT ON <<ReferencedDB>>.<<ReferencedObject>> TO <<SourceDB>> WITH GRANT OPTION;

или

GRANT SELECT ON <<ReferencedDB>> to <<SourceDB>> WITH GRANT OPTION;

Комментарии:

1. Зачем нужна ОПЦИЯ WITH GRANT? Почему в этом случае недостаточно привилегии SELECT?

2. SELECT WITH GRANT действует как сквозное разрешение, позволяющее пользователю получить доступ к объекту, на доступ к которому им явно не было предоставлено разрешение, и не имеет неявных прав на объект.

3. Таблица, которую я запрашиваю, является фактической таблицей, а не представлением. И я знаю, что у меня есть к нему доступ SELECT. Этого доступа недостаточно?

4. Я обнаружил, что тот же вызов sqoop работает, если я добавляю -m1 . Очень странно

Ответ №2:

Вам нужно предоставить права выбора с опцией grant в <> .

Перейдите по этой ссылке http://teradataforum.com/teradata/20040908_102929.htm

Комментарии:

1. Зачем нужна ОПЦИЯ WITH GRANT? Почему недостаточно привилегии SELECT?