shell脚本实现hive增量加载

匿名 (未验证) 提交于 2019-12-02 23:49:02

实现思路:

1、每天凌晨将前一天增量的数据从业务系统导出到文本,并FTP到Hadoop集群某个主节点上

  上传路径默认为:/mnt/data/crawler/

2、主节点上通过shell脚本调用hive命令加载本地增量温江到hive临时表

3、shell脚本中,使用hive sql 实现临时表中的增量数据更新或者新增增量数据到hive 主数据表中

实现步骤:
1.建表语句, 分别创建两张表test_temp, test 表

?

crrawler.test_temp(

)

row format delimited

fields terminated by ','

stored as textfile

;

+++++++++++++++++++++++++++++++++

create table crawler.test(

)

partitioned by (dt string)

row format delimited

fields terminated by '\t'

stored as orc

;



2.编写处理加载本地增量数据到hive临时表的shell脚本test_temp.sh

?

#! /bin/bash

##################################

# 日期参数可选,默认是系统日期-1 #

##################################

dt=''

table=test_temp

#获取当前系统日期

sysdate=`date +%Y%m%d`

#获取昨日日期,格式: YYYYMMDD

yesterday=`date -d yesterday +%Y%m%d`

#数据文件地址

file_path=/mnt/data/crawler/

if [ $# -eq 1 ]; then

elif [ $# -eq 0 ]; then

else

fi

filename=$file_path$table'_'$dt'.txt'

if [ ! -e $filename ]; then

hive<<EOF

EOF

if [ $? -eq 0 ]; then

else

fi



3.增量加载临时数据到主数据表的shell脚本test.sh

?

#! /bin/bash

##################################

table=test

#获取当前系统日期

sysdate=`date +%Y%m%d`

#实现增量覆盖

hive<<EOF

set hive.exec.dynamic.partition.mode=nonstrict;

insert overwrite table crawler.test partition (dt)

select a.id, a.name, a.email, a.create_time, a.create_time as dt

from (

) a;

quit;

EOF

if [ $? -eq 0 ]; then

else

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!