hadoop - 在sqoop命令中使用Teradata快速导出

标签 hadoop teradata sqoop

使用Teradata方法“--fast-export”时,从Teradata数据库中发信息时出现问题,下面是示例发信息


-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] [错误3524] [SQLState 42000]用户没有对数据库DATABASE的CREATE VIEW访问权限。

我怀疑快速导出将实现临时创建的临时表/ View ,而后台工作将从临时表中提取。这是一种抑制机制,可以将其关闭吗?

非常感谢

最佳答案

快速导出不实现任何 View 来提取数据。 Sqoop正在基于--query值创建 View 。因此,运行该作业的用户必须具有在DATABASE上授予的CV权限。

您可以通过运行以下查询,在环境中替换USER_NAME和DATABASE_NAME的值,来检查用户在数据库上的权限。

ACCESS_RIGHT ='CV',表示创建 View ,因此保持原样。

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给出

关于hadoop - 在sqoop命令中使用Teradata快速导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59748245/

相关文章:

hadoop - hadoop hive shell 中绝对 URI 中的相对路径

amazon-web-services - Hadoop 2.9.2 AWS

teradata - 查看与易失表?

hadoop - sqoop import 说可以找到 Class <tablename>

hadoop - 如何在另一个配置单元查询中使用配置单元查询的输出?

amazon-web-services - AWS Hadoop MapReduce-平均字数

database - 使用 R JDBC 插入 Teradata

database - 在 Debian 或 CentOS 中安装 Teradata

hadoop - 使用 Sqoop 导出到 Postgresql ltree

mysql - 错误 org.apache.sqoop.tool.ExportTool - 导出时出错 : Export job failed