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

  • Post author:
  • Post category:其他




一、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_sk date month month_name quarter year
日期编号 日期 月份 月份名称 季度 年份



二、编写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;

部分截图如下:

在这里插入图片描述



版权声明:本文为and52696686原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。