4.sqoop增量導入

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這一天的數據

.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章