1.增量導入hdfs
在實際工作當中,數據的導入很多時候都是全量的導入一次, 之後只需要導入增量數據即可,並不需要將表中的數據全部導入到hive或者hdfs當中去,肯定會出現重複的數據的狀況,所以我們一般都是選用一些字段進行增量的導入,爲了支持增量的導入,sqoop也給我們考慮到了這種情況並且支持增量的導入數據.
-
增量導入是僅導入新添加的表中的行的技術。
-
它需要添加 ‘incremental’, ‘check-column’, 和 ‘last-value’選項來執行增量導入。
--incremental <mode>
--check-column <column name>
--last value <last check column value>
第一種增量導入實現
-
基於遞增列的增量數據導入(Append方式)
-
導入emp表當中id大於2的所有數據
-
注意:這裏不能加上 --delete-target-dir 參數,添加就報錯
-
sqoop import \
--connect jdbc:mysql://node1:3306/userdb \
--username root \
--password 123456 \
--table emp \
--incremental append \
--check-column id \
--last-value 2 \
-m 1 \
--target-dir /sqoop/increment1
參數解釋
--incremental 這裏使用基於遞增列的增量數據導入
--check-column 遞增列字段
--last-value 指定上一次導入中檢查列指定字段最大值
--target-dir 數據導入的目錄
提交查看HDFS上的目錄看是否有數據生成
第二種增量導入實現
-
基於時間列的增量數據導入(LastModified方式)
-
此方式要求原有表中有time字段,它能指定一個時間戳
-
emp表結構和數據
-
-
sqoop import \
--connect jdbc:mysql://node2:3306/userdb \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop/increment2 \
--incremental lastmodified \
--check-column createTime \
--last-value '2020-06-01 14:01:51' \
--m 1
參數解釋
--incremental 這裏使用基於時間列的增量導入
--check-column 時間字段
--last-value 指定上一次導入中檢查列指定字段最大值
--target-dir 數據導入的目錄
如果該目錄存在(可能已經有數據)
再使用的時候需要添加 --merge-key 或則 --append
--merge-key 指定合併key(對於源表中有更新過的數據有合併作用)
--append 直接追加修改的數據
提交查看HDFS上的目錄看是否有數據生成 , 只有2020-06-01這一天的數據
.