Hadoop 在sqoop命令中使用teradata快速导出

Hadoop 在sqoop命令中使用teradata快速导出,hadoop,teradata,sqoop,Hadoop,Teradata,Sqoop,使用Teradata方法-快速导出时,Teradata数据库中的sqoop存在问题,下面是sqoop查询示例 -Dhadoop.security.credential.provider.path=jceks:/PATH/TO/password/password.jcecks -Dteradata.db.job.data.dictionary.usexviews=false --connect jdbc:teradata://DATABASE --password-alias pass

使用Teradata方法-快速导出时,Teradata数据库中的sqoop存在问题,下面是sqoop查询示例


-Dhadoop.security.credential.provider.path=jceks:/PATH/TO/password/password.jcecks

-Dteradata.db.job.data.dictionary.usexviews=false

--connect

jdbc:teradata://DATABASE

--password-alias

password.alias

--username

USER

--connection-manager

org.apache.sqoop.teradata.TeradataConnManager

--fields-terminated-by

'\t'

--lines-terminated-by

'\n'

--null-non-string

''

--null-string

''

--num-mappers

8

--split-by

column3

--target-dir

/THE/TARGET/DIR

--query

SELECT column1,column2,column3 WHERE column3 > '2020-01-01 00:00:00' and column3 <= '2020-01-12 10:41:20' AND $CONDITIONS

--

--method

internal.fastexport
我得到的错误是

原因:com.teradata.connector.common.exception.ConnectorException:java.sql.SQLException:[teradata数据库][TeraJDBC][Error 3524][SQLState 42000]用户没有对数据库的创建视图访问权限

我怀疑fast export将实现一个临时创建的临时表/视图,并且引擎盖下的作业将从临时表中摄取。这是sqoop机制吗?是否可以将其关闭

非常感谢


Dan

快速导出不实现任何视图来提取数据。该视图是由Sqoop基于-query值创建的。因此,运行作业的用户必须拥有对数据库的CV权限

您可以通过运行以下查询来检查用户对数据库的权限,该查询将用户名称和数据库名称替换为环境中的值

ACCESS_RIGHT='CV',表示创建视图,所以保持原样

SELECT * 
FROM dbc.allRoleRights WHERE roleName IN 
(SELECT roleName FROM dbc.roleMembers WHERE grantee = 'USER_NAME')
AND DATABASENAME = 'DATABASE_NAME'
AND ACCESS_RIGHT = 'CV'
ORDER BY 1,2,3,5;

为了创建用于快速导出的日志表,您可能需要CT创建表权限。这是由Sqoop参数-error table和-error database给出的,这可能是一个愚蠢的问题,但是-您的数据库是否实际命名为database?如果不是,则此参数似乎未正确设置/传递。对不起,我应该提到。我从问题中删除了更敏感的信息服务器详细信息等。我发现,如果我从sqoop查询中删除快速导出方法,那么它运行良好,但性能较差。我认为您应该使用-output方法,而不是下面参考链接中的-method。还应按照本页的说明使用连接字符串。