使用SQOOP对HIVE进行增量更新会将数据添加到表格中间

时间:2015-10-06 09:38:05

标签: hive sqoop mapper

我正在尝试使用以下命令将新数据从SQLServer附加到Hive

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语句导致映射器输出为 part-m-00000-copy

因此我在hive表目录中的数据看起来像

部分-M-00000

部分-M-00000-复制

部分-M-00001

部分-M-00002

有没有办法通过更改mapper的名称来追加数据?

1 个答案:

答案 0 :(得分:0)

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

您的分析中正确无误 - 数据出现在"中间"是Hive会根据词典排序读取一个接一个的文件,而Sqoop只是简单地命名它们将被附加到该列表中间某处的文件。

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

我也有兴趣了解这对您的用例有何影响?我假设列出所有行的查询只是一个测试。您对实际生产查询有任何问题吗?