2015-10-06 82 views
0

我试图从SQLServer的追加新数据使用以下命令增量更新使用SQOOP将数据追加到表

sqoop import --connect 'jdbc:sqlserver://10.1.1.12;database=testdb' --username uname --password passwd --table testable --where "ID > 11854" --hive-import -hive-table hivedb.hivetesttable --fields-terminated-by ',' -m 1 

此命令追加数据蜂箱中间。

但是当我运行

select * from hivetesttable; 

它不列入末显示新的数据。

这是因为附加的新数据sqoop import语句导致映射器输出作为部分-M-00000拷贝

所以我在蜂巢表目录数据看起来像

兼职M-00000

部分-M-00000拷贝

部分-M-00001

part -m-00002

有什么办法可以在最后追加数据,方法是更改​​映射器的名称?

回答

0

与其他任何关系数据库类似,Hive不保证任何顺序,除非明确使用ORDER BY子句。

你的分析是正确的 - 数据出现在“中间”的原因是Hive会根据字典排序来读取一个接一个的文件,而Sqoop只是简单地命名它们将被附加到文件中的文件该列表的中间。

但是,此操作是完全有效的 - 将Sqoop附加数据添加到Hive表,并且因为您的查询没有任何明确的ORDER BY语句,所以结果没有关于顺序的保证。事实上,Hive本身可以改变这种行为,并根据创建时间读取文件,而不会破坏任何兼容性。

我也很想看看这是如何影响你的用例?我假设列出所有行的查询只是一个测试。您是否对实际生产查询有任何问题?