sqoop export 資料覆蓋更新
一、Sqoop export簡介
Sqoop export工具被用來將檔案集合從HDFS中匯入到關係型資料庫中。目標表必須事先已經在資料庫中建立好。輸入檔案根據使用者指定的分隔符被讀取解析成記錄集。Sqoop預設的是將這些操作轉換成“INSERT模式”,向目標資料庫中注入資料記錄。在“更新模式”中,Sqoop將會產生更新語句替換資料庫中已經存在的記錄。在“呼叫模式”中,Sqoop會為每個記錄產生一個儲存過程呼叫。
1、“INSERT模式”:Sqoop預設將每條記錄以轉換成INSERT語句,新增到資料庫表中,如果你的表存在一些約束如關鍵字唯一等,使用插入模式要當心,避免違反這些約束。如果一條記錄插入失敗那麼,該匯入job將會失敗。這種模式一般用於將資料匯入到一個新的、空的表。Sqoop預設情況下使用INSERT 模式
2、“UPDATE模式”:如果指定--update-key引數,Sqoop將會修改一個資料庫中存在的資料集,每一條記錄都會當做UPDATE語句來修改存在的記錄。記錄的修改語句根據--update-key指定的列決定。如果一個更新語句在資料庫中沒有對應的記錄,則不會報錯,匯出操作會繼續進行。事實上,這意味著不會在資料庫中匯入新的記錄,只是更新原始資料。
二、引數介紹
--update-key 後面也可以接多個關鍵字列名,可以使用逗號隔開,Sqoop將會匹配多個關鍵字後再執行更新操作。
--export-dir 引數配合--table或者--call引數使用,指定了HDFS上需要將資料匯入到MySQL中的檔案集目錄。
--update-mode updateonly和allowinsert。 預設模式為updateonly,如果指定--update-mode模式為allowinsert,可以將目標資料庫中原來不存在的資料也匯入到資料庫表中。即將存在的資料更新,不存在資料插入。
三、組合測試及說明
1、當指定update-key,且關係型資料庫表存在主鍵時:
A、allowinsert模式時,為更新目標資料庫表存的內容,並且原來不存在的資料也匯入到資料庫表;
B、updateonly模式時,為更新目標資料庫表存的內容,並且原來不存在的資料也不匯入到資料庫表;
2、當指定update-key,且關係型資料庫表不存在主鍵時:
A、allowinsert模式時,為全部資料追加匯入到資料庫表;
B、updateonly模式時,為更新目標資料庫表存的內容,並且原來不存在的資料也不匯入到資料庫表;
3、當不指定update-key,且關係型資料庫表存在主鍵時:
A、allowinsert模式時,報主鍵衝突,資料無變化;
B、updateonly模式時,報主鍵衝突,資料無變化;
4、當不指定update-key,且關係型資料庫表不存在主鍵時:
A、allowinsert模式時,為全部資料追加匯入到資料庫表;
B、updateonly模式時,為全部資料追加匯入到資料庫表;
歡迎大家針對以上案例測試,如存在差錯請指教。
個人建議:使用sqoop向關係型資料庫中匯入資料時,建議在關係型資料庫表中建立主鍵。
若澤大資料交流群:671914634
Sqoop export工具被用來將檔案集合從HDFS中匯入到關係型資料庫中。目標表必須事先已經在資料庫中建立好。輸入檔案根據使用者指定的分隔符被讀取解析成記錄集。Sqoop預設的是將這些操作轉換成“INSERT模式”,向目標資料庫中注入資料記錄。在“更新模式”中,Sqoop將會產生更新語句替換資料庫中已經存在的記錄。在“呼叫模式”中,Sqoop會為每個記錄產生一個儲存過程呼叫。
1、“INSERT模式”:Sqoop預設將每條記錄以轉換成INSERT語句,新增到資料庫表中,如果你的表存在一些約束如關鍵字唯一等,使用插入模式要當心,避免違反這些約束。如果一條記錄插入失敗那麼,該匯入job將會失敗。這種模式一般用於將資料匯入到一個新的、空的表。Sqoop預設情況下使用INSERT 模式
2、“UPDATE模式”:如果指定--update-key引數,Sqoop將會修改一個資料庫中存在的資料集,每一條記錄都會當做UPDATE語句來修改存在的記錄。記錄的修改語句根據--update-key指定的列決定。如果一個更新語句在資料庫中沒有對應的記錄,則不會報錯,匯出操作會繼續進行。事實上,這意味著不會在資料庫中匯入新的記錄,只是更新原始資料。
二、引數介紹
--update-key 後面也可以接多個關鍵字列名,可以使用逗號隔開,Sqoop將會匹配多個關鍵字後再執行更新操作。
--export-dir 引數配合--table或者--call引數使用,指定了HDFS上需要將資料匯入到MySQL中的檔案集目錄。
--update-mode updateonly和allowinsert。 預設模式為updateonly,如果指定--update-mode模式為allowinsert,可以將目標資料庫中原來不存在的資料也匯入到資料庫表中。即將存在的資料更新,不存在資料插入。
三、組合測試及說明
1、當指定update-key,且關係型資料庫表存在主鍵時:
A、allowinsert模式時,為更新目標資料庫表存的內容,並且原來不存在的資料也匯入到資料庫表;
B、updateonly模式時,為更新目標資料庫表存的內容,並且原來不存在的資料也不匯入到資料庫表;
2、當指定update-key,且關係型資料庫表不存在主鍵時:
A、allowinsert模式時,為全部資料追加匯入到資料庫表;
B、updateonly模式時,為更新目標資料庫表存的內容,並且原來不存在的資料也不匯入到資料庫表;
3、當不指定update-key,且關係型資料庫表存在主鍵時:
A、allowinsert模式時,報主鍵衝突,資料無變化;
B、updateonly模式時,報主鍵衝突,資料無變化;
4、當不指定update-key,且關係型資料庫表不存在主鍵時:
A、allowinsert模式時,為全部資料追加匯入到資料庫表;
B、updateonly模式時,為全部資料追加匯入到資料庫表;
歡迎大家針對以上案例測試,如存在差錯請指教。
個人建議:使用sqoop向關係型資料庫中匯入資料時,建議在關係型資料庫表中建立主鍵。
若澤大資料交流群:671914634
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31511218/viewspace-2150172/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- logminer恢復誤覆蓋更新的資料
- 教你兩種資料庫覆蓋式資料匯入方法資料庫
- 微軟Windows 10創意者更新秋季版覆蓋率覆蓋率再達新高:已達85%微軟Windows
- 事務註解(@Transactional)引起的資料覆蓋故障
- 資料庫系列:覆蓋索引和規避回表資料庫索引
- 【大資料】— sqoop ?大資料OOP
- Mysql索引覆蓋MySql索引
- 最小圓覆蓋
- JS陣列push會覆蓋前面的資料問題JS陣列
- Sqoop-1.4.4工具import和export使用詳解OOPImportExport
- 程式碼覆蓋率與測試覆蓋率比較
- 企業WiFi覆蓋,解決覆蓋四大難題WiFi
- 第9條:覆蓋equals時總要覆蓋hashCode方法
- Java方法覆蓋和變數覆蓋的區別詳解Java變數
- istanbul 繞過 window 變數儲存覆蓋率資料變數
- 如何避免舊請求的資料覆蓋掉最新請求
- EMMA 覆蓋率工具
- 語法:Python中的可覆蓋物件與不可覆蓋物件Python物件
- rest_framework django 簡單使用(資料庫建立資料, 覆蓋資料, 其他的大同小異)RESTFrameworkDjango資料庫
- 基於程式覆蓋資訊的資料庫核心問題定位工具資料庫
- 通過BBED的COPY來覆蓋表裡現有的資料塊
- canvas 填充覆蓋描邊Canvas
- pHp程式碼覆蓋率PHP
- php實現矩形覆蓋PHP
- 程式碼覆蓋率分析
- 線段覆蓋問題
- 資料同步工具Sqoop和DataXOOP
- sqoop資料匯入匯出OOP
- 四、建立覆蓋網路--Flannel
- ESLint: 規則配置覆蓋EsLint
- 76. 最小覆蓋子串
- 談如何正確理解 IP 資料的覆蓋率,兼談正確率~
- sqoop從hdfs導資料至oracle資料庫OOPOracle資料庫
- 星環科技覆蓋資料全生命週期的安全防護能力,共同保障大資料安全大資料
- 最大匹配、最小頂點覆蓋、最大獨立集、最小路徑覆蓋(轉)(再轉)
- mysql 資料sqoop到hive 步驟MySqlOOPHive
- SQL與NoSQL,資料橋樑SqoopSQLOOP
- sqoop安裝及資料遷移OOP