sqoop与sql server检索更多记录

时间:2013-09-03 07:55:56

标签: sqoop

问:我想使用SQOOP从 SQL服务器导入5000行,但它给了我20000行。我正在使用以下查询。

sudo -E -u hdfs sqoop import --connect "jdbc:sqlserver://hostname;username=*****;password=*****;database=*****" --driver com.microsoft.sqlserver.jdbc.SQLServerDriver --query "select top 5000 * from Tb_Emp  where \$CONDITIONS" --split-by EmpID -m 4 --target-dir /home/sqoop_SQLServeroutput

检索了20000条记录

每个映射器都有5000条记录。但如果我在 mysql 上执行此操作,则会按预期提供5000条记录。

sudo -E -u hdfs sqoop import --connect jdbc:mysql://hostname/<database_name> --username **** --password **** --query 'select * from Tb_Emp where $CONDITIONS limit 5000' --split-by EmpID -m 4 --target-dir /home/sqoop_MySqloutput

检索了5000条记录。

不要为什么会发生这种情况。

1 个答案:

答案 0 :(得分:0)

使用“top x”或“limit x”子句对Sqoop没有多大意义,因为它可以在每次查询执行时返回不同的值(没有“order by”)。此外,该条款很可能会混淆分裂生成,而不是那些容易确定的输出。话虽如此,我建议您只使用1个映射器(-m 1或--num-mappers 1),以防您需要导入预定义的行数。另一种解决方案是在MySQL / SQL Server端创建包含所需数据的临时表,并使用Sqoop导入整个临时表。