我从SQLServer导入并使用下面的查询创建了一个配置单元表。
sqoop import --connect 'jdbc:sqlserver://10.1.1.12;database=testdb' --username uname --password paswd --table demotable --hive-import --hive-table hivedb.demotable --create-hive-table --fields-terminated-by ','
命令成功,导入了数据并创建了一个包含10000条记录的表。
我在SQLServer中插入了10条新记录,并尝试使用--where子句将这10条记录附加到现有的配置单元表中
sqoop import --connect 'jdbc:sqlserver://10.1.1.12;database=testdb' --username uname --password paswd --table demotable --where "ID > 10000" --hive-import -hive-table hivedb.demotable
但是sqoop作业因错误而失败
error tool.importtool:导入期间出错:导入作业失败!
我哪里出错了?使用sqoop插入到表中的任何其他替代方法。
编辑:在稍微改变上面的命令后,我可以添加新行。
sqoop import --connect 'jdbc:sqlserver://10.1.1.12;database=testdb' --username uname --password paswd --table demotable --where "ID > 10000" --hive-import -hive-table hivedb.demotable --fields-terminated-by ',' -m 1
虽然它解决了上述问题,但我不能插入修改过的行。有没有办法插入修改过的行而不使用--incremental lastmodified参数。
4条答案
按热度按时间apeeds0o1#
我们可以使用以下命令:
olqngx592#
我不确定是否可以在sqoop中使用--hive import选项提供direct--append选项。它至少在1.4版中仍然不可用。
当缺少--hive overwrite和--create hive table时,默认行为是append(至少在这种情况下。
我同意nakulchawla09的回答。不过,提醒你自己要保留--splitby选项。这将确保适当地创建配置单元数据存储中的拆分名称。否则您将不喜欢默认命名。如果您不关心后台配置单元仓库命名和后台数据存储,可以忽略此注解。当我试着用下面的命令
追加前
在附加之前在配置单元仓库中保存文件
用于再次附加8k记录的sqoop命令
它创建了以下文件。您可以看到文件名不是很好,因为没有提供split-by选项或split-hash(可以是datetime或date)。
Hive记录现在追加
beeline:hive2>从地理位置选择计数(*);
sgtfey8w3#
为了将行追加到配置单元表,请使用以前使用过的查询,只需删除--hive overwrite。
我将共享用于在配置单元中导入的两个查询,一个用于覆盖,一个用于附加,您可以使用相同的查询进行导入:
覆盖以前的记录
附加到以前的记录
注意,我使用4个Map器,你也可以使用更多。
gfttwv5a4#
使用
--append
选项和-m 1
所以会是这样的: