这些内容是从sqoop的官网整理出来的,是1.4.3版本的Document,如果有错误,希望大家指正。 1.使用sqoop导入数据
sqoop import --connect jdbc:mysql://localhost/db --username foo --table TEST 2.账号密码
sqoop import --connect jdbc:mysql://database.example.com/employees \ --username aaron --password 12345 3.驱动
sqoop import --driver com.microsoft.jdbc.sqlserver.SQLServerDriver --connect <connect-string> ...
4.写sql语句导入的方式
sqoop import --query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' --split-by a.id --target-dir /user/foo/joinresults
如果是顺序导入的话,可以只开一个线程 sqoop import --query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' -m 1 --target-dir /user/foo/joinresults 如果where语句中有要用单引号的,就像这样子写就可以啦"SELECT * FROM x WHERE a='foo' AND \$CONDITIONS" 5. 1.4.3版本的sqoop不支持复杂的sql语句,不支持or语句
6. --split-by <column-name>
7. --direct 是为了利用某些数据库本身提供的快速导入导出数据的工具,比如mysql的mysqldump
8.导入数据到hdfs目录,这个命令会把数据写到/shared/foo/ 目录
sqoop import --connnect <connect-str> --table foo --warehouse-dir /shared \
sqoop import --connnect <connect-str> --table foo --target-dir /dest \
9.传递参数给快速导入的工具,使用--开头,下面这句命令传递给mysql默认的字符集是latin1
sqoop import --connect jdbc:mysql://server.foo.com/db --table bar \ --direct -- --default-character-set=latin1
10.转换为对象
11.增加导入 增加导入支持两种模式append和lastmodified,用--incremental来指定
12.在导入大对象,比如BLOB和CLOB列时需要特殊处理,小于16MB的大对象可以和别的数据一起存储,超过这个值就存储在_lobs的子目录当中 它们采用的是为大对象做过优化的存储格式,最大能存储2^63字节的数据,我们可以用--inline-lob-limit参数来指定每个lob文件最大的限制是多少 如果设置为0,则大对象使用外部存储
13.分隔符、转移字符 下面的这句话
14.hive导入参数
15.hive空值处理
sqoop import ... --null-string '\\N' --null-non-string '\\N'
16.导入数据到hbase
17.代码生成参数,没看懂
18.通过配置文件conf/sqoop-site.xml来配置常用参数 <property> <name>property.name</name> <value>property.value</value> </property> 如果不在这里面配置的话,就需要像这样写命令
sqoop import -D property.name=property.value ...
19.两个特别的参数
20.例子
#指定列 $ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \ --columns "employee_id,first_name,last_name,job_title" #使用8个线程 $ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \ -m 8 #快速模式 $ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \ --direct #使用sequencefile作为存储方式 $ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \ --class-name com.foocorp.Employee --as-sequencefile #分隔符 $ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \ --fields-terminated-by '\t' --lines-terminated-by '\n' --optionally-enclosed-by '\"' #导入到hive $ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \ --hive-import #条件过滤 $ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \ --where "start_date > '2010-01-01'" #用dept_id作为分个字段 $ sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES \ --split-by dept_id #追加导入 $ sqoop import --connect jdbc:mysql://db.foo.com/somedb --table sometable \ --where "id > 100000" --target-dir /incremental_dataset --append
21.导入所有的表sqoop-import-all-tables
sqoop import-all-tables --connect jdbc:mysql://db.foo.com/corp
22.export 我们采用sqoop-export插入数据的时候,如果数据已经存在了,插入会失败
sqoop-export --table foo --update-key id --export-dir /path/to/data --connect … UPDATE foo SET msg='this is a test', bar=42 WHERE id=0; UPDATE foo SET msg='some more data', bar=100 WHERE id=1; 这样即使找不到它也不会报错 23.如果存在就更新,不存在就插入
24.事务的处理
25.例子
$ sqoop export --connect jdbc:mysql://db.example.com/foo --table bar \ --export-dir /results/bar_data $ sqoop export --connect jdbc:mysql://db.example.com/foo --table bar \ --export-dir /results/bar_data --validate $ sqoop export --connect jdbc:mysql://db.example.com/foo --call barproc \ --export-dir /results/bar_data
|
|