mysql数据通过sqoop直接导入hive的指定分区的脚本模板

选择这种方式,sqoop把数据直接从mysql导入到hive的指定分区,可以不用去考虑hive表的格式,是否列式存储或者采用了压缩,并且columns参数可以选择自己想要导入hive中的指定mysql列名。

要注意脚本如果重复执行,会往hive分区中重复插入数据,所以在sqoop import 之前先drop掉hive的对应分区。

#!/bin/bash

# 定义变量
sqoop=/usr/local/service/sqoop/bin/sqoop
hive=/usr/local/service/hive/bin/hive

mysql_db=**
mysql_table=**
hive_db=**
hive_table=**
columns="***"

# 获取mysql配置文件中的配置
source /usr/local/config/mysql.config
host=${host_15}
port=${port_15}
username=${username_15}
password=${password_15}

# 如果是输入的日期按照取输入日期;如果没输入日期取当前时间的前一天
if [ -n "$1" ] ;then
    do_date=$1
else
    do_date=$(date -d "-1 day" +%F)
fi

# 执行之前先删除对应分区,保证脚本可重复执行,避免数据重复
$hive -e "alter table ${hive_db}.${hive_table}  drop partition(dt='${do_date}');"

function ods_schema_device_info_da_sqoop() {
  "${sqoop}" import --connect "jdbc:mysql://${host}:${port}/${mysql_db}?zeroDateTimeBehavior=convertToNull&
  dontTrackOpenResources=true&defaultFetchSize=1000&useCursorFetch=true" \
  --username "${username}" \
  --password "${password}" \
  --driver com.mysql.jdbc.Driver \
  --table "${mysql_table}" \
  --hcatalog-database "${hive_db}" \
  --hcatalog-table "${hive_table}" \
  --hcatalog-partition-keys dt \
  --hcatalog-partition-values "${do_date}" \
  --columns "${columns}" \
  --m 1
}

ods_schema_device_info_da_sqoop

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值