Sqoop是一个实现在关系型数据库和Hive进行数据交换的工具。主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
转载请注明出处:Hive数据仓库-Sqoop将数据从Mysql导入Hive中
参数
hive导入参数
--hive-home 重写$HIVE_HOME
--hive-import 插入数据到hive当中,使用hive的默认分隔符
--hive-overwrite 重写插入
--create-hive-table 建表,如果表已经存在,该操作会报错!
--hive-table [table] 设置到hive当中的表名
--hive-drop-import-delims 导入到hive时删除 \n, \r, and \01
--hive-delims-replacement 导入到hive时用自定义的字符替换掉 \n, \r, and \01
--hive-partition-key hive分区的key
--hive-partition-value hive分区的值
--map-column-hive 类型匹配,sql类型对应到hive类型
示例
最基本的方式是直接把表的所有的数据复制过来。这里希望大家注意库要定义好,Hive中如果不定义的话会直接放入default中去。
/usr/local/sqoop1.4/sqoop1.4_hadoop2.0/bin/sqoop import --connect jdbc:mysql://localhost:3306/ managdb --username xxx --password xxx --table data_xxx_view --fields-terminated-by ',' --hive-import --hive-table userxxxxdb.data_xxx --hive-overwrite -m 1
通过Sqoop进行查询的情况
这里需要注意的是where后面需要跟$CONDITIONS
这样直接存入hdfs中然后再进行导入即可,我尝试过直接导入,但是总是出现下面的这个错误,也没能解决掉,所以采用了这种间接的形式
At minimum, you must specify --connect and --table Arguments to mysqldump and other subprograms may be supplied after a '--' on the command line.
转载请注明出处: Hive数据仓库-Sqoop将数据从Mysql导入Hive中
/usr/local/sqoop1.4/sqoop1.4_hadoop2.0/bin/sqoop import \
--connect "jdbc:mysql://localhost:3306/managdb?useUnicode=true&characterEncoding=utf-8" --username XX --password xxxx\
--query "select p FROM TB where \$CONDITIONS;" -m 1 \
--null-string 'null' --null-non-string 'null' \
--fields-terminated-by ',' --lines-terminated-by '\n' \
--hive-drop-import-delims \
--target-dir /usr/local/data --as-textfile \
--delete-target-dir;