我正在尝试使用以下命令将新数据从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的名称来追加数据?
答案 0 :(得分:0)
Hive,与任何其他关系数据库类似,除非您明确使用ORDER BY子句,否则不保证任何订单。
您的分析中正确无误 - 数据出现在"中间"是Hive会根据词典排序读取一个接一个的文件,而Sqoop只是简单地命名它们将被附加到该列表中间某处的文件。
但是此操作完全有效 - Sqoop将数据附加到Hive表,并且因为您的查询没有任何显式的ORDER BY语句,结果对订单没有任何保证。事实上,Hive本身可以改变这种行为,并根据创建时间读取文件,而不会破坏任何兼容性。
我也有兴趣了解这对您的用例有何影响?我假设列出所有行的查询只是一个测试。您对实际生产查询有任何问题吗?