Sqoop 數據導出:全量、增量、更新


背景信息

SQOOP支持直接從Hive表到RDBMS表的導出操作,也支持HDFS到RDBMS表的操作,

當前需求是從Hive中導出數據到RDBMS,有如下兩種方案:

Ø 從Hive表到RDBMS表的直接導出:

該種方式效率較高,但是此時相當於直接在Hive表與RDBMS表的數據之間做全量、增量和更新對比,當Hive表記錄較大時,或者RDBMS有多個分區表時,無法做精細的控制,因此暫時不考慮該方案。

Ø 從HDFS到RDBMS表的導出:

該方式下需要先將數據從Hive表導出到HDFS,再從HDFS將數據導入到RDBMS。雖然比直接導出多了一步操作,但是可以實現對數據的更精准的操作,特別是在從Hive表導出到HDFS時,可以進一步對數據進行字段篩選、字段加工、數據過濾操作,從而使得HDFS上的數據更“接近”或等於將來實際要導入RDBMS表的數據。在從HDFS導入RDBMS時,也是將一個“小數據集”與目標表中的數據做對比,會提高導出速度。示意圖如下所示:
在這里插入圖片描述

不同導出模式介紹

全量導出

Ø 應用場景:將Hive表中的全部記錄(可以是全部字段也可以部分字段)導出到目標表。

Ø 實現邏輯:

在這里插入圖片描述
Ø 使用限制:目標表中不能有與Hive中相同的記錄,一般只有當目標表為空表時才使用該模式進行首次數據導出。

Ø 參數:源表、目標表、導出字段(select的字段)、映射關系(–column后的參數)

Ø 適用的數據庫:Oracle、DB2、SQL Server、PG、MySQL

增量導出

Ø 應用場景:將Hive表中的增量記錄以及有修改的記錄同步到目標表中。

Ø 實現邏輯:

在這里插入圖片描述
Ø 使用限制:update-key可以是多個字段,但這些字段的記錄都應該是未被更新過的,若該參數指定的字段有更新,則對應記錄的更新不會被同步到目標表中。

Ø 參數:源表、目標表、篩選字段及其取值范圍、導出字段(select的字段)、映射關系(–column后的參數)、更新的參考字段(–update-key后的參數)

Ø 適用的數據庫:Oracle、SQL Server、MySQL

更新導出

Ø 應用場景:將Hive表中的有更新的記錄同步到目標表。

Ø 實現邏輯:
在這里插入圖片描述

Ø 使用限制:update-key可以是多個字段,但這些字段的記錄都應該是未被更新過的,若該參數指定的字段有更新,則對應記錄的更新不會被同步到目標表中。

Ø 參數:源表、目標表、篩選字段及其取值范圍、導出字段(select的字段)、映射關系(–column后的參數)、更新的參考字段(–update-key后的參數)

Ø 適用的數據庫:Oracle、DB2、SQL Server、PG、MySQL

相關腳本

全量導出
HQL示例:insert overwrite  directory ‘/user/root/export/test’ row format delimited fields terminated by ‘,’ STORED AS textfile select F1,F2,F3 from <sourceHiveTable>;
 
SQOOP腳本:sqoop export --connect jdbc:mysql://localhost:3306/wht --username root --password cloudera --table <targetTable> --fields-terminated-by ','  --columns F1,F2,F3 --export-dir /user/root/export/test
 
增量導出(insert模式)
HQL示例:insert overwrite  directory ‘/user/root/export/test’ row format delimited fields terminated by ‘,’ STORED AS textfile select F1,F2,F3 from <sourceHiveTable> where <condition>;
 
SQOOP腳本:sqoop export --connect jdbc:mysql://localhost:3306/wht --username root --password cloudera --table <targetTable> --fields-terminated-by ‘,’  --columns F1,F2,F3 --update-key F4 --update-mode  allowinsert --export-dir /user/root/export/test
 
 
更新導出(update模式)
HQL示例:insert overwrite  directory ‘/user/root/export/test’ row format delimited fields terminated by ‘,’ STORED AS textfile select F1,F2,F3 from <sourceHiveTable> where <condition>;
 
SQOOP腳本:sqoop export --connect jdbc:mysql://localhost:3306/wht --username root --password cloudera --table <targetTable> --fields-terminated-by ‘,’  --columns F1,F2,F3 --update-key F4 --update-mode  updateonly --export-dir /user/root/export/test


轉自:https://blog.csdn.net/qq_35495339/article/details/95620740


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM