sqoop自定义日期采集数据脚本

本文介绍如何使用Hive和Sqoop进行数据同步,包括从MySQL抽取数据至HDFS,再加载至Hive分区的过程。涉及参数配置、建表语句及数据加载命令。
#!/bin/bash
source /etc/profile
date1=$1
date2=$2

if [ ! -n "$1" ] ;then
    echo "请输入起始日期"
fi

if [ ! -n "$2" ] ;then
    echo "请输入结束日期"
fi

#hive配置
#账号名
account=root
#hive的数据库名
hive_database=trade_ods
#hive的表明
hive_table=trade
#昨天的日期,作为分区
yestday=`date -d'-1 day' +%Y-%m-%d`
#分区名
partition=dt
#sqoop抽取到hdfs上的路径
target_dir=/tmp/hive/$account/$hive_database/$hive_table
#mysql配置
ip=192.168.255.0
port=3306
user=root
password=123456
#mysql库名表名
database=trade
table=trade_origin
#代表时间的字段,update_time
date_field=update_time
#需要从mysql里抽取的字段,一般是全部字段
field=id,unit,code,update_time,create_time

#如果没表就建表,[!需要修改!]建表语句里面的字段名和数据类型
hive -e "
create table if not exists $hive_database.$hive_table (
id string,
unit string,
code int,
update_time timestamp,
create_time timestamp
) partitioned by ($parititon string)
ROW FORMAT DELIMITED fields terminated by ',';
"

#通过query将数据抽取到指定目录
output=$( \
sqoop import \
--connect jdbc:mysql://${ip}:${port}/${database}?useSSL=false \
--username ${user} \
--password ${password} \
--query "select ${field} from ${table} where \$CONDITIONS and (CAST($date_field as DATE)<'${date2}' and CAST($date_field as DATE)>='${date1}')" \
--delete-target-dir \
--target-dir  $target_dir \
--m 1 \
2>&1)

#加载数据覆盖到昨天的分区
hive -e "
load data inpath '$target_dir/part-m-00000' overwrite into table $hive_database.$hive_table parititon($parititon='$yestday');
"

调度的时候输入两个日期即可,一般是昨天和今天两个日期,也可以指定时间反胃,它会从mysql抽取两个日期内的数据到hdfs上,然后load到hive的分区中,
需要改的有上面的参数还有一个建表语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值