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