以下文章是mysql表导入到hiveORC存储格式的分区表中
mysql表导入到hiveTEXTfile存储格式的分区表 请点此跳转
Sqoop需要依赖HCatalog的lib,所以需要配置环境变量$HCAT_HOME,一般从hive目录下即可找到hcatalog的相关路径
- hive/lib中将hive-hcatalog-core-1.2.2.jar复制到sqoop/lib下
- cp $HIVE_HOME/lib/hive-shims* $SQOOP_HOME/lib/
- 在/etc/profile文件中添加
export HCATALOG_HOME=${HIVE_HOME}/hcatalog
下面的脚本中需要赋值的变量
${IP} mysql所在的服务器IP
${USERNAME} mysql用户名
${PWD} mysql密码
$MYSQLTABLE mysql表
${date_field} 表中的时间字段
${partition_name} hive中需要加入的分区字段名
${partition_value} hive分区值
1、sqoop创建并导入数据到hive orc表
sqoop import \
--connect jdbc:mysql://$IP:3306/$MYSQLDB \
--username $USERNAME \
--password $PWD \
--table $MYSQLTABLE \
--driver com.mysql.jdbc.Driver \
--hcatalog-database intelligentCoal \
--create-hcatalog-table \
--hcatalog-table t_user_orc \
--where "date_format(${date_field},'%Y-%m-%d')='${partition_value}' and \$CONDITIONS" \
--hcatalog-partition-keys ${partition_name} \
--hcatalog-partition-values ${partition_value} \
--hcatalog-storage-stanza 'stored as orc tblproperties ("orc.compress"="SNAPPY")' \
-m 1
where选项根据需求自行添加或者不加,不加where的效果和 --where "1=1 and \$CONDITIONS" \ 一样
2、sqoop导入数据到已存在的hive orc表
sqoop import \
--connect jdbc:mysql://$IP:3306/$MYSQLDB \
--username $USERNAME \
--password $PWD \
--table $MYSQLTABLE \
--driver com.mysql.jdbc.Driver \
--hcatalog-database intelligentCoal \
--hcatalog-table t_user_orc \
--where "date_format(${date_field},'%Y-%m-%d')='${partition_value}' and \$CONDITIONS" \
--hcatalog-partition-keys ${partition_name} \
--hcatalog-partition-values ${partition_value} \
--hcatalog-storage-stanza 'stored as orc tblproperties ("orc.compress"="SNAPPY")' \
-m 1
若不指定字段类型,MySQL中的varchar数据抽取至hive中也会是varchar类型,但是varchar类型在hive中操作会出现各种问题
1.抽取时长文本、含有特殊字符的文本抽取不全
2.hive操作orc表varchar类型的字段造成乱码
解决:抽取数据时指定字段类型(xxx是你要改成String类型的column)
-map-column-hive xxx=String,xxxx=String
-------------------------------------------------------------------------------------------------------------------
connect JDBC连接信息 username JDBC验证用户名 password JDBC验证密码 table 要导入的源表名 driver 指定JDBC驱动 create-hcatalog-table 指定需要创建表,若不指定则默认不创建,注意若指定创建的表已存在将会报错 hcatalog-table 要导出的目标表名 hcatalog-storage-stanza 指定存储格式,该参数值会拼接到create table的命令中。默认:stored as rcfile hcatalog-partition-keys 指定分区字段,多个字段请用逗号隔开(hive-partition-key的加强版) hcatalog-partition-values 指定分区值,多分区值请用逗号隔开(hive-partition-value的加强)