我可以使用sqoop将RDBMS表数据(表没有主键)导入hive吗?如果是,那么请你给sqoop import命令。
我已尝试使用sqoop import general命令,但失败了。
如果您的表没有定义主键,那么您必须为导入数据提供-m 1
选项,或者您必须提供带有某些列名的--split-by
参数,否则它会给出错误:
ERROR tool.ImportTool: Error during import: No primary key could be found for table <table_name>. Please specify one with --split-by or perform a sequential import with '-m 1'
然后你的sqoop命令看起来像
sqoop import \
--connect jdbc:mysql://localhost/test_db \
--username root \
--password **** \
--table user \
--target-dir /user/root/user_data \
--columns "first_name, last_name, created_date"
-m 1
要么
sqoop import \
--connect jdbc:mysql://localhost/test_db \
--username root \
--password **** \
--table user \
--target-dir /user/root/user_data \
--columns "first_name, last_name, created_date"
--split-by created_date
您可以在没有主键的情况下将数据从RDBMS导入到配置单元。
首先,您需要在hive中创建一个表。之后,您需要编写以下代码:
sqoop import \
--connect jdbc:mysql://localhost/test_db \
--username root \
--password **** \
--table <RDBMS-Table-name> \
--target-dir /user/root/user_data \
--hive-import \
--hive-table <hive-table-name> \
--create-hive-table \
-m 1 (or) --split-by <RDBMS-Column>
在使用1 Mapper的第一个场景中...如果文件的大小非常大,则此过程将花费更多时间来响应或可能失败。在使用mapper = 1之前检查数据的大小。
快速浏览:
描述:通常,当您在内部执行Sqoop作业时,它会在表中搜索主键。如果没有主键,则Sqoop作业失败,错误看起来像“导入时出错:找不到表的主键。请指定一个用--split-by或用'-m 1执行顺序导入'“。该建议描述了此方案有两种替代方法。
最好的方法是选项2
在命令中使用以下命令:
--autoreset-to-one-mapper
如果表没有主键且没有提供拆分列,则Import
应使用一个映射器。它不能与--split-by <col>
选项一起使用。