如何用Sqoop导入Oracle指定模式下的所有表?参数异常求助
解决Sqoop导入Oracle指定Schema(用户)下所有表的问题
你说得没错——Oracle确实不支持Sqoop的--schema参数,这是因为Oracle的"schema"概念和PostgreSQL、SQL Server这类数据库完全不同:在Oracle体系里,schema本质上就是数据库用户本身,不存在独立于用户的schema层级。你指定的-- --schema ADW参数对Oracle驱动没有任何作用,所以Sqoop会默认使用--username指定的testUser对应的schema。
正确的解决方法
要导入Oracle中指定用户(也就是你所说的"schema")下的所有表,有两种可靠的实现方式:
1. 在JDBC连接URL中指定currentSchema参数
这是最直接的方式,通过JDBC URL强制指定会话默认的schema:
sqoop import-all-tables \ --connect "jdbc:oracle:thin:@(url)?currentSchema=ADW" \ --username testUser \ --password-file /user/hadoop/oracle_pwd.password \ --autoreset-to-one-mapper \ --warehouse-dir s3://bucket/ADW_IMPORT/ \ -m 32
currentSchema参数会让Oracle驱动在会话启动后自动切换到ADW用户对应的schema,后续所有表操作都会默认指向这个schema。
2. 直接登录目标schema对应的用户
如果ADW用户本身拥有独立登录权限,你可以直接用该用户的账号密码执行导入,Sqoop会自动导入该用户(即schema)下的所有表:
sqoop import-all-tables \ --connect "jdbc:oracle:thin:@(url)" \ --username ADW \ --password-file /user/hadoop/adw_pwd.password \ --autoreset-to-one-mapper \ --warehouse-dir s3://bucket/ADW_IMPORT/ \ -m 32
额外注意事项
- 确保
testUser账号拥有访问ADW用户下所有表的SELECT权限,否则会触发权限报错。 --autoreset-to-one-mapper和-m 32可以根据表的数据量灵活调整,平衡导入速度和数据库负载。
内容的提问来源于stack exchange,提问作者Surajit Kundu
相关产品推荐
相关产品推荐

