3.sqoop過濾數據導入hive表(where和query條件)

1.導入表數據子集到hdfs(可以改成導入到hive,舉一反三)

  • 導入表使用Sqoop導入工具,"where"子句的一個子集。它執行在各自的數據庫服務器相應的SQL查詢,並將結果存儲在HDFS的目標目錄。

  • 按照條件進行查找,通過--where參數來查找表emp當中dept字段的值爲 TP 的所有數據導入到hdfs上面去

sqoop import \
--connect jdbc:mysql://node2:3306/userdb \
--username root --password 123456 --table emp \
--target-dir /sqoop/emp_where -m 1  --delete-target-dir \
--where "dept = 'TP'"

提交查看HDFS上的目錄看是否有數據生成

2.sql語句查找導入hdfs(可以到到hive,自己嘗試)

我們還可以通過 –query參數來指定我們的sql語句,通過sql語句來過濾我們的數據進行導入

sqoop import \
--connect jdbc:mysql://node2:3306/userdb \
--username root --password 123456 \
--target-dir /sqoop/emp_sql -m 1  --delete-target-dir \
--query 'select * from emp where salary >30000 and $CONDITIONS'

提交查看HDFS上的目錄看是否有數據生成

$CONTITONS是linux系統的變量,如果你想通過並行的方式導入結果,每個map task需要執行sql查詢語句的副本,結果會根據sqoop推測的邊界條件分區。query必須包含$CONDITIONS。這樣每個scoop程序都會被替換爲一個獨立的條件。同時你必須指定--split-by '字段',後期是按照字段進行數據劃分,最後可以達到多個MapTask並行運行。

 

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