Hive分层数仓的处理(代码层面)
分层处理
五层分层设计
ODS
DWD
DWS
DWT
ADS
ODS层
1、创建支持LZO压缩的分区表
2、数据加载
3、脚本语句
DWD层
1、建表
drop table if exists dwd_xxx
create external table dwd_xxx(
`表字段` 字段类型 COMMENT '字段注释'
) COMMENT '表注释'
partitioned by (dt string) --按照时间创建分区
stored as parquet --采用parquet列式存储
location '你想要把这张表存放在hdfs上的位置'
tblproperties('parquet.comperssion'='lzo');--表采用LZO压缩
备注:
1、数据采用 parquet 列式存储,是可以支持切片的,不需要再对数据创建索引。
2、如果采用 text 方式存储,需要采用支持切片的。lzop压缩方式并创建索引。
2、日志数据加载
SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
insert overwrite table dwd_xxx partition(dt='日期')
select
get_json_object(xxx)
from
ods_xxx
where
dt='日期'
and
xxx
备注:
1、由于执行 count(*) 操作,默认采用的是 CombineHiveInputFormat,不能识别 lzo.index 为索引文件,将索引文件当作普通文件处理。更严重的是,这会导致LZO文件无法切片。因此我们需要在执行前,声明使用 HiveInputFormat;
3、维度表数据加载
SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
inset overwrite table dwd_dim_xxx partition(dt='日期')
select
dim1.该维度表内部字段,
dim2.该维度表内部字段,
dim3