天天看點

sqoop常用指令

參考:https://blog.csdn.net/zhongqi2513/article/details/53281255

Sqoop是一個用來将Hadoop和關系型資料庫中的資料互相轉移的工具,可以将一個關系型資料庫(例如 : MySQL ,Oracle ,Postgres等)中的資料導進到Hadoop的HDFS中,也可以将HDFS的資料導進到關系型資料庫中。

通過sqoop help指令檢視其指令選項:

[[email protected] ~]# sqoop help
Warning: /opt/cloudera/parcels/CDH-5.4.11-1.cdh5.4.11.p0.5/bin/../lib/sqoop/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
19/10/21 14:35:54 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5-cdh5.4.11
usage: sqoop COMMAND [ARGS]

Available commands:
  codegen            Generate code to interact with database records
  create-hive-table  Import a table definition into Hive
  eval               Evaluate a SQL statement and display the results
  export             Export an HDFS directory to a database table
  help               List available commands
  import             Import a table from a database to HDFS
  import-all-tables  Import tables from a database to HDFS
  import-mainframe   Import datasets from a mainframe server to HDFS
  job                Work with saved jobs
  list-databases     List available databases on a server
  list-tables        List available tables in a database
  merge              Merge results of incremental imports
  metastore          Run a standalone Sqoop metastore
  version            Display version information

See 'sqoop help COMMAND' for information on a specific command.
           

這些指令中使用最多的是import和export(導入導出都是站在HDFS角度來說的),下面着重記錄一下這兩個指令使用。

1.eval

eval指令可以讓sqoop使用sql語句對資料庫進行操作,如查詢表結構,删除資料等。

sqoop eval --connect jdbc:mysql://192.168.0.1:3306/mem --username aaa --password 123456 --query "select * from mem limit 10;"

sqoop eval \
--connect jdbc:postgresql://$olc_host:$olc_port/$olc_dbname \
--username $olc_uname \
--password $olc_upass \
--query "truncate table mem" \
;
           

2.export

從HDFS中将資料導出到關系型資料庫中,參數如下:

sqoop常用指令
sqoop常用指令

舉例:

目标庫中建一張與hive庫中一樣的表,且使用者有插入權限

sqoop export \
--connect jdbc:postgresql://$olc_host:$olc_port/$olc_dbname \
--username $olc_uname \
--password $olc_upass \
--table olc_user \
--update-mode allowinsert \
--fields-terminated-by '\001' \
--export-dir '/user/hive/olc_user.db/olc_user' \
--input-null-string '\\N' \
--input-null-non-string '\\N' \
;
           

3.import

從關系型資料庫中将資料導入到HDFS中,與export指令正好相反,參數如下:

sqoop常用指令
sqoop常用指令

舉例:

sqoop import --connect jdbc:postgresql://$olc_host:$olc_port/$olc_dbname \
--username $olc_uname \
--password $olc_upass \
--table product \
--target-dir '/user/hive/product/20191022T005417/' \
--delete-target-dir \
--fields-terminated-by '\0x01' \
--lines-terminated-by n \
--compress \
--compression-codec org.apache.hadoop.io.compress.GzipCodec \
--null-string '\N' \
--null-non-string '\N' \
--split-by id 
-m 4 \
--where "to_char(create_time,'yyyy-MM-dd')>='2016-08-24'" \
;