【sqoop】导入数据到orc格式hive指定分区表中

以下文章是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的加强)

你可能感兴趣的:(Sqoop)