以下文章是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 ("press"="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 ("press"="SNAPPY")' \-m 1
若不指定字段类型,MySQL中的varchar数据抽取至hive中也会是varchar类型,但是varchar类型在hive中操作会出现各种问题
1.抽取时长文本、含有特殊字符的文本抽取不全
2.hive操作orc表varchar类型的字段造成乱码
解决:抽取数据时指定字段类型(xxx是你要改成String类型的column)
-map-column-hive xxx=String,xxxx=String
-------------------------------------------------------------------------------------------------------------------