sehll脚本生成数据加载到Hive表中

一、hive中建表

  1. 创建数据库:
create database sales_dw;
use sales_dw;
  1. 建表:
create table dim_date
(
date_sk int,
date date,                
month tinyint,                
month_name varchar(16),            
quarter tinyint,             
year int                
) row format delimited fields terminated by ','
stored as textfile;

dim_date 为内部表,字段含义为:

date_skdatemonthmonth_namequarteryear
日期编号日期月份月份名称季度年份

二、编写shell 脚本

  1. 创建脚本文件
vi generate_dim_date.sh

内容如下:

#!/bin/bash
# 起始日期,传入的第一个参数为 date1
date1=$1
# 终止日期,传入的第二个参数为 date2
date2=$2  
# 日期,返回 date1 的完整日期,不包含时分秒
tmpdate=`date -d "$date1" +%F`
# 起始时间戳 date1
startSec=`date -d "$date1" +%s`
# 终止时间戳 date2
endSec=`date -d "$date2" +%s`
# 循环的起始值
min=1
# 循环的终止值,表示终止时间与起始时间二者相差的天数
# expr表达式中每个字符之间都要有空格,否则会报错, \( 表示转义
max=`expr \( $endSec - $startSec \) / 60 / 60 / 24`

#当 min < max 的时候执行while循环(注意空格):
while [ $min -le $max ]
do
	# 计算月份
	month=`date -d "$tmpdate" +%m`
	# 计算月份名称
	month_name=`date -d "$tmpdate" +%B`
	# 计算年
	year=`date -d "$tmpdate" +%Y`
	# 计算季度
	quarter=`expr \( $month - 1 \) \/ 3 + 1`
	# 输出到文件
	echo ${min}","${tmpdate}","${month}","${month_name}","${quarter}","${year} >> ./dim_date.csv
	# 计算下一次的日期(+1 day 代表当前日期天数加1)
	tmpdate=`date -d "+$min day $date1" +%F`
	# 计算下一次的时间戳
	startSec=`date -d "+$min day $date1" +%s`
	# 变量+1
	min=`expr $min + 1`
done

注:测试脚本中语句:

startSec=`date -d "$2020-9-1" +%s`
endSec=`date -d "$2020-9-3" +%s`
max=`expr \( $endSec - $startSec \) / 60 / 60 / 24` 										
		   #相减是两者相差的秒数,除以60得到分/得到小时/得到天数                                  
echo $max  -->   #返回2,即相差2天

date -d '2020-9-1' +%F         -->   2020-09-01,返回完整日期,不包含时分秒

time=`date -d '2020-9-1' +%F`
echo $time						-->  2020-09-01
  1. 给脚本文件赋权:
chmod +x generate_dim_date.sh
  1. 执行脚本(传入起始日期:2010-1-1,终止日期:2050-1-1):
    数据量较大,需稍微等待一段时间
./generate_dim_date.sh 2010-1-1 2050-1-1

在这里插入图片描述
可以看到生成了 dim_date.csv 文件

三、上传文件至hdfs

  1. 查看文件上传路径
    在hive命令行查看 dim_date 建表语句:
show create table dim_date;

如下图:
在这里插入图片描述
由于是内部表,可以找到表数据的存储目录: /hive/warehouse/sales_dw.db/dim_date

  1. dim_date.csv 文件上传至此目录下
hdfs dfs -put dim_date.csv  /hive/warehouse/sales_dw.db/dim_date

3.上传完成查询到表数据

select * from dim_date;

部分截图如下:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值