如何每日增量加载数据到Hive分区表

 我来答
哀烟宫培
2020-01-15 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:31%
帮助的人:988万
展开全部
加载数据
数据加载到Hive分区表(两个分区,日期(20160316)和小时(10))中
每日加载前一天的日志文件数据到表db_track.track_log
1.
数据存储
数据日志文件,放入某个目录下,每天日志文件放入同一个目录
eg:
20160316
-
目录名称
日志文件数据,每个小时生成一个文件,一天总共有二十四个文件
eg:
2016031820
2.
shell脚本编写
负责调度的shell脚本load_tracklogs.sh
注:这里涉及到了两个点:1)for循环
2)
linux下字符串的截取${line:0:4}
3)
传递参数到hive的sql脚本
#!/bin/sh
##
环境变量生效
.
/etc/profile
##
HIVE
HOME
HIVE_HOME=/opt/cdh5.3.6/hive-0.13.1-cdh5.3.6
##
日志目录
LOG_DIR=/data/tracklogs
##
目录名称,
依据日期date获取
yesterday=`date
-d
-1days
'+%Y%m%d'`
###
for
line
in
`ls
$LOG_DIR/${yesterday}`
do
echo
"loading
$line
.............."
#从文件名称中解析出日期和小时
daily=${line:0:4}${line:4:2}${line:6:2}
hour=${line:8:2}
LOAD_FILE=${LOG_DIR}/${yesterday}/${line}
###
echo
$daily
+
$hour
###
${HIVE_HOME}/bin/hive
-e
"LOAD
DATA
LOCAL
INPATH
'${LOAD_FILE}'
OVERWRITE
INTO
TABLE
db_track.track_log
PARTITION(date
=
'${daily}',
hour
=
'${hour}')
;"
${HIVE_HOME}/bin/hive
--hiveconf
LOAD_FILE_PARAM=${LOAD_FILE}
--hiveconf
daily_param=${daily}
--hiveconf
hour_param=${hour}
-f
/home/hadoop/load_data.sql
done
负责加载数据的sql脚本
注:
怎么在HQL脚本中获取外接传递的参数
LOAD
DATA
LOCAL
INPATH
'${hiveconf:LOAD_FILE_PARAM}'
OVERWRITE
INTO
TABLE
db_track.track_log
PARTITION(date
=
'${hiveconf:daily_param}',
hour
=
'${hiveconf:hour_param}')
;
制定每天定时执行
可以在当前用户下直接创建:crontab
-e
注:crontab中的五个
*号分别代表分,时,日,月,周,下面的例子就是每天晚上1点30运行任务的例子,注意sh命令前一般需要加上绝对路径
#
LODAD
DATA
INTO
TRACK_LOG
30
1
*
*
*
/bin/sh
/home/hadoop/load_tracklogs.sh
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式