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並行運行。