Sqoop导出到SQL Server:模式?

3
我希望将HDFS中的数据导出到模式为my_schema的SQL Server表中。
我尝试使用类似于导入命令的--schema
sqoop export \
--libjars /opt/mapr/sqoop/sqoop-1.4.6/lib/sqljdbc4.jar \
--connect "jdbc:sqlserver://MY-SERVER-DNS;database=my_db;" \
--schema "myschema" \
--table "my_table" \
--export-dir /path/to/my/hdfs/dir

ERROR tool.BaseSqoopTool: Unrecognized argument: --schema

--table "schema.table"

sqoop export \
--libjars /opt/mapr/sqoop/sqoop-1.4.6/lib/sqljdbc4.jar \
--connect "jdbc:sqlserver://MY-SERVER-DNS;database=my_db;" \
--table "my_schema.my_table" \
--export-dir /path/to/my/hdfs/dir

INFO manager.SqlManager: 
Executing SQL statement: SELECT t.* FROM [my_schema.my_table] AS t WHERE 1=0 

ERROR manager.SqlManager: Error executing statement: 
com.microsoft.sqlserver.jdbc.SQLServerException:
Invalid object name 'my_schema.my_table'.

有没有使用sqoop或其他技术来实现这个的方法?
编辑:
sqoop export \
--libjars /opt/mapr/sqoop/sqoop-1.4.6/lib/sqljdbc4.jar \
--connect "jdbc:sqlserver://MY-SERVER-DNS;database=my_db;schema=my_schema;" \
--table "my_table" \
--export-dir /path/to/my/hdfs/dir

INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM [my_table] AS t WHERE 1=0
16/07/25 10:46:21 ERROR manager.SqlManager: 
Error executing statement: com.microsoft.sqlserver.jdbc.SQLServerException:
Invalid object name 'my_table'.

这不识别模式(schema)。

2个回答

9

在连接字符串中提供模式:

jdbc:sqlserver://MY-SERVER-DNS;databaseName=my_db;schema=my_schema;

因此,您的导出sqoop命令应该是:

sqoop export \
--libjars /opt/mapr/sqoop/sqoop-1.4.6/lib/sqljdbc4.jar \
--connect "jdbc:sqlserver://MY-SERVER-DNS;databaseName=my_db;schema=my_schema;" \
--table "my_table" \
--export-dir /path/to/my/hdfs/dir

此外:

导入和导出任务都支持自定义模式 - 根据Sqoop指南中的语法,需要将--schema作为-- --schema来传递:

所以您的导出sqoop命令应该是:

sqoop export \
--libjars /opt/mapr/sqoop/sqoop-1.4.6/lib/sqljdbc4.jar \
--connect "jdbc:sqlserver://MY-SERVER-DNS;databaseName=my_db;" \
--export-dir /path/to/my/hdfs/dir
--table "my_table" \
-- --schema my_schema \

0

我通过将Hive表从管理状态转换为外部状态来解决了这个问题。

CREATE EXTERNAL TABLE new_table
AS
SELECT *
FROM old_table

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接