2014-07-17 48 views
1

我有一個要求,其中我需要從mysql導入表增量配置單元,並面臨着這樣做的問題。 這是我到目前爲止所嘗試的:Sqoop:問題與增量進口

  1. 我已經創建了一個工作來導入下面提到的查詢表。

/sqoop工作

--create test2 -- import 
--connect jdbc:mysql://URL 
--username username 
--password password 
--table mysqlTablename 
--hive-import 
--hive-overwrite 
--direct 
--incremental lastmodified 
--check-column last_modified_time 
--last-value 0 

第一次執行:與最小值邊界爲「0」和最大邊界,當前時間的預計導入的一切。 第二次執行:從上次運行中的所有更改都被拾取,但舊的行正在被覆蓋,只留下從上次運行中更改的行。

  1. 我刪除了--hive-overwrite和--hive-import選項,並使用'--target-dir'選項。 第一次執行:按照預期獲取所有內容,最小邊界爲'0',最大邊界爲當前時間,但由於Metastore沒有更新,因此不會顯示在Hive中。 第二次執行:它將引發一個錯誤,指出作爲參數提到的directoty已經存在--target-dir選項。這是在從HDFS中刪除直接數據後執行的,但不能解決目的。

我發現這個提到的問題,並沒有發現其他比把新的值到一個側面目錄,並運行sqoop上的數據合併到壓平的解決方案。我想在一個shell腳本中自動執行此操作,並想知道是否有更好的方法來處理這個增量更新。

想要檢查什麼是最好的選擇,我需要導入一個MySQL表,並根據最後一次修改時間戳的列增量更新更改爲配置單元。 即根據mysql中的更改創建,更新或刪除Hive表中的行,以使它們保持同步。

對此非常感謝。

問候 羅希特

回答

1

它非常困難的基於蜂巢系統,以處理涉及更新記錄的增量加載。這link將提供很多可行的解決方案。

1

使用append命令而不是lastmodified來連續獲取更新。

如:

--create test2 -- import 
--connect jdbc:mysql://URL 
--username username 
--password password 
--table mysqlTablename 
--hive-import 
--direct 
--incremental append 
--check-column last_modified_time 
--last-value "0"