2015-10-06 31 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本身可以改變這種行爲,並根據創建時間讀取文件,而不會破壞任何兼容性。

我也很想看看這是如何影響你的用例?我假設列出所有行的查詢只是一個測試。您是否對實際生產查詢有任何問題?