2

问:我想使用 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 条记录。

不要为什么它会发生。

4

1 回答 1

0

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

于 2013-09-03T08:47:22.437 回答