大数据仓库项目day6

1数仓搭建之ODS & DWD

1.1 创建数据库

1)创建gmall数据库

hive (default)> create database gmall;

说明:如果数据库存在且有数据,需要强制删除时执行:drop database gmall cascade;

2)使用gmall数据库

hive (default)> use gmall;

1.2 ODS

原始数据层,存放原始数据,直接加载原始日志、数据,数据保持原貌不做处理。

1.2.1 创建启动日志表ods_start_log

 

1)创建输入数据是lzo输出是text,支持json解析的分区表

hive (gmall)>

drop table if exists ods_start_log;

CREATE EXTERNAL TABLE  `ods_start_log`(`line` string)

PARTITIONED BY (`dt` string)

STORED AS

  INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'

  OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'

LOCATION '/warehouse/gmall/ods/ods_start_log';

说明Hive的LZO压缩:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+LZO

2)加载数据

hive (gmall)>

load data inpath '/origin_data/gmall/log/topic_start/2020-04-03' into table gmall.ods_start_log partition(dt='2020-04-03');

注意:时间格式都配置成YYYY-MM-DD格式,这是hive默认支持的时间格式

3)查看是否加载成功

hive (gmall)> select * from ods_start_log limit 2;

1.2.2 创建事件日志表ods_event_log

 

1)创建输入数据是lzo输出是text,支持json解析的分区表

hive (gmall)>

drop table if exists ods_event_log;

CREATE EXTERNAL TABLE  `ods_event_log`(`line` string)

PARTITIONED BY (`dt` string)

STORED AS

  INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'

  OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'

LOCATION '/warehouse/gmall/ods/ods_event_log';

2)加载数据

hive (gmall)>

load data inpath '/origin_data/gmall/log/topic_event/2020-04-03' into table gmall.ods_event_log partition(dt='2020-04-03');

注意:时间格式都配置成YYYY-MM-DD格式,这是Hive默认支持的时间格式

3)查看是否加载成功

hive (gmall)> select * from ods_event_log limit 2;

1.2.3 ODS层加载数据脚本

1)在hadoop102的/home/atguigu/bin目录下创建脚本

[atguigu@hadoop102 bin]$ vim ods.sh

在脚本中编写如下内容

#!/bin/bash

 

# 定义变量方便修改

APP=gmall

hive=/opt/module/hive/bin/hive

 

# 如果是输入的日期按照取输入日期;如果没输入日期取当前时间的前一天

if [ -n $1 ] ;then

 log_date=$1

else

 log_date=`date  -d "-1 day"  +%F`  

fi

 

echo "===日志日期为 $log_date==="

$hive -e "load data inpath '/origin_data/gmall/log/topic_start/$log_date' into table "$APP".ods_start_log partition(dt='$log_date')"

$hive -e "load data inpath '/origin_data/gmall/log/topic_event/$log_date' into table "$APP".ods_event_log partition(dt='$log_date')"

说明1:

[ -n 变量 ] 判断变量的值,是否为空

-- 变量的值,非空,返回true

-- 变量的值,为空,返回false

说明2:

查看date命令的使用,[atguigu@hadoop102 ~]$ date --help

2)增加脚本执行权限

[atguigu@hadoop102 bin]$ chmod 777 ods.sh

3)脚本使用

[atguigu@hadoop102 module]$ ods.sh 2019-02-11

4)查看导入数据

hive (gmall)>

select * from ods_start_log where dt='2020-04-03' limit 2;

select * from ods_event_log where dt='2020-04-03' limit 2;

5)脚本执行时间

企业开发中一般在每日凌晨30分~1点

1.3 DWD层数据解析

对ODS层数据进行清洗(去除空值,脏数据,超过极限范围的数据,行式存储改为列存储,改压缩格式)。

1.3.1 创建基础明细

明细表用于存储ODS层原始表转换过来的明细数据。

 

1)创建启动日志基础明细表

hive (gmall)>

drop table if exists dwd_base_start_log;

CREATE EXTERNAL TABLE `dwd_base_start_log`(

`mid_id` string,

`user_id` string,

`version_code` string,

`version_name` string,

`lang` string,

`source` string,

`os` string,

`area` string,

`model` string,

`brand` string,

`sdk_version` string,

`gmail` string,

`height_width` string,

`app_time` string,

`network` string,

`lng` string,

`lat` string,

`event_name` string,

`event_json` string,

`server_time` string)

PARTITIONED BY (`dt` string)

stored as  parquet

location '/warehouse/gmall/dwd/dwd_base_start_log/';

其中event_name和event_json用来对应事件名和整个事件。这个地方将原始日志1对多的形式拆分出来了。操作的时候我们需要将原始日志展平,需要用到UDF和UDTF。

2)创建事件日志基础明细表

hive (gmall)>

drop table if exists dwd_base_event_log;

CREATE EXTERNAL TABLE `dwd_base_event_log`(

`mid_id` string,

`user_id` string,

`version_code` string,

`version_name` string,

`lang` string,

`source` string,

`os` string,

`area` string,

`model` string,

`brand` string,

`sdk_version` string,

`gmail` string,

`height_width` string,

`app_time` string,

`network` string,

`lng` string,

`lat` string,

`event_name` string,

`event_json` string,

`server_time` string)

PARTITIONED BY (`dt` string)

stored as  parquet

location '/warehouse/gmall/dwd/dwd_base_event_log/';

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值