【数据仓库】【第十章】ODS层「建议收藏」

【数据仓库】【第十章】ODS层「建议收藏」1.创建数据库现在数仓环境已经搭建好了;数据也都已经采集到hdfs上了;1)启动hive[atguigu@hadoop102hive]$bin/hive2)显示数据库hive(default)>showdatabases;3)创建数据库hive(default)>createdatabasegmall;4)使用数据库hive(default)>usegmall;ODS层1.用户行为数据(1)建表分析一行数据是什么:一条日志有哪些字段:

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

ods层设计要点

保留原始数据,不做处理

如何设计表?

1)ODS层的表结构设计依托于从业务系统同步过来的数据结构

2)ODS层要保存全部历史数据,故其压缩格式应选择压缩比较高的,此处选择gzip。

3)ODS层表名的命名规范为: ods_表名_单分区增量全量标识(inc/full)。

1.创建数据库

现在数仓环境已经搭建好了;
数据也都已经采集到hdfs上了;

1)启动hive

[atguigu@hadoop102 hive]$ bin/hive

2)显示数据库

hive (default)> show databases;

3)创建数据库

hive (default)> create database gmall;

4)使用数据库

hive (default)> use gmall;

2. ODS层

1.用户行为数据

(1)建表分析

  • 一行数据是什么:一条日志
  • 有哪些字段:只有一个字段
  • 如何分区:按天分区,每天存放一天的用户日志
    在这里插入图片描述
  • ods层数据存储

(2)建表语句

方案1

直接将json字符串当做一个字段,后续用json函数进行解析

drop table if exists ods_log;
CREATE EXTERNAL TABLE ods_log (`line` string)
PARTITIONED BY (`dt` string) -- 按照时间创建分区
STORED AS -- 指定存储方式,读数据采用LzoTextInputFormat;
  INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
  OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION '/warehouse/gmall/ods/ods_log'-- 指定数据在hdfs上的存储位置
;

Inputformat: 从这张表中读取数据时用的format;取决于这张表中存储的数据的文件格式,是lzo压缩的格式。

需要注意: 在使用hive读取表的时候,如果不走MR任务,会按照此表指定的InputFormat格式来读取,如果走MR任务,会按照Hive自身默认的读取格式来读取;

Outputformat: 往这张表写数据时用的;只对insert方式起作用;
ods层的表都是从hdfs直接load过来的,因此这里outputformat的设置没有什么意义;

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


方案2:直接解析Json

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL
在这里插入图片描述

CREATE TABLE my_table(a string, b bigint, ...)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.JsonSerDe'
STORED AS TEXTFILE;
  • ROW FORMAT:指定分隔符;

  • SerDe:序列化和反序列化;
    ROW FORMAT SERDE 是指定序列化和反序列化器;

  • STORED AS TEXTFILE : hdfs存储格式;

  • 字段依赖于Json字符串


什么是SerDe

在这里插入图片描述

SerDe 用于读写文件中的行;
hvie通过io将文件数据读取到jvm进程中,将记录封装成对象进行处理;

读的流程:
hdfs file -> inputFileFormat -> <K,V> -> Deserializer -> Row object

写的流程:
Row object -> Serializer -> <K,V> -> OutputFileFormat -> HDFS files

Hive在建表的时候,底层都会将表解析成3个组件:
在这里插入图片描述


建表

  • json表 的字段名必须和Json中的Key保持一致!

在这里插入图片描述

页面日志 :

在这里插入图片描述
启动日志:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

注意:不能用map,map结构,key和value的类型都固定了;这里每个k-v是独立的,所以用struct;

在这里插入图片描述

CREATE EXTERNAL TABLE ods_log_inc
(
    `common`   STRUCT<ar :STRING,ba :STRING,ch :STRING,is_new :STRING,md :STRING,mid :STRING,os :STRING,uid :STRING,vc
                      :STRING> COMMENT '公共信息',
    `page`     STRUCT<during_time :STRING,item :STRING,item_type :STRING,last_page_id :STRING,page_id
                      :STRING,source_type :STRING> COMMENT '页面信息',
    `actions`  ARRAY<STRUCT<action_id:STRING,item:STRING,item_type:STRING,ts:BIGINT>> COMMENT '动作信息',
    `displays` ARRAY<STRUCT<display_type :STRING,item :STRING,item_type :STRING,`order` :STRING,pos_id
                            :STRING>> COMMENT '曝光信息',
    `start`    STRUCT<entry :STRING,loading_time :BIGINT,open_ad_id :BIGINT,open_ad_ms :BIGINT,open_ad_skip_ms
                      :BIGINT> COMMENT '启动信息',
    `err`      STRUCT<error_code:BIGINT,msg:STRING> COMMENT '错误信息',
    `ts`       BIGINT  COMMENT '时间戳'
) COMMENT '活动信息表'
    PARTITIONED BY (`dt` STRING)
    ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.JsonSerDe'
    LOCATION '/warehouse/gmall/ods/ods_log_inc/';

建表的时候,将启动日志的字段和页面日志的合并到一起!
在这里插入图片描述
直接load进textFile格式就行了!

(3)加载数据

在这里插入图片描述
每天装载昨天的数据到ods_log表中;

load data inpath '/origin_data/gmall/log/topic_log/2020-06-14' \
into table ods_log partition(dt='2020-06-14');

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

最后,如果是lzo压缩的文件,需要为lzo压缩文件创建索引

2. 全量表 建表

(1)分区规划

  • 每日都全量同步到ods层当天的分区中!

(2)建表

Lzo索引格式文件建表:

DROP TABLE IF EXISTS ods_activity_info;
CREATE EXTERNAL TABLE ods_activity_info(
    `id` STRING COMMENT '编号',
    `activity_name` STRING  COMMENT '活动名称',
    `activity_type` STRING  COMMENT '活动类型',
    `start_time` STRING  COMMENT '开始时间',
    `end_time` STRING  COMMENT '结束时间',
    `create_time` STRING  COMMENT '创建时间'
) COMMENT '活动信息表'
PARTITIONED BY (`dt` STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS
  INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
  OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION '/warehouse/gmall/ods/ods_activity_info/';

DataX同步过来的建表方式

在这里插入图片描述

  • NULL DEFINED AS ‘’ :Hive中的Null为 /NA,这里用’’;
  • DataX没有将Mysql中的null值转换为Hdfs中/NA,会转换成空字符串’’,为了保证hive能识别,就让hive的空值保存格式和DataX的空值格式保持一致!
  • 反之,hdfs数据导入到Mysql中,有空值的配置!

3.增量表建表

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185678.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java项目视频22套「建议收藏」

    java项目视频22套「建议收藏」java项目视频22套如图所示:获取方式:关注微信公众号:javafirst发送“Java项目视频”即可获取链接

  • 个性化推荐算法总结[通俗易懂]

    个性化推荐算法总结[通俗易懂]读书笔记|《推荐系统实践》-个性化推荐系统总结对于推荐系统,本文总结内容,如下图所示:一、什么是推荐系统1.为什么需要推荐系统为了解决互联网时代下的信息超载问题。2.搜索引擎与推荐系统分类目录,是将著名网站分门别类,从而方便用户根据类别查找公司。 搜索引擎,用户通过输入关键字,查找自己需要的信息。 推荐系统,和搜索引擎一样,是一种帮助用户快速发展有用信…

  • hbase开发:使用java操作hbase_结合实例论述总结的特点有哪些

    hbase开发:使用java操作hbase_结合实例论述总结的特点有哪些HBase总结-Java API 与HBase交互实例

  • SetCapture和ReleaseCapture

    SetCapture和ReleaseCapture函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。  函数原型:HWNDSetCapture(HWNDhwnd);  参数:  hWnd:当前线程里要捕获鼠标的

  • Linux服务器集群_rtmp服务器集群

    Linux服务器集群_rtmp服务器集群Reference: http://www.linuxvirtualserver.org/zh/lvs1.htmlLVS项目介绍章文嵩 (wensong@linux-vs.or

  • Zookeeper安装_windows docker安装部署

    Zookeeper安装_windows docker安装部署百度网盘链接提取码:yg12拷贝zoo.cfg更改日志输出路径新建文件夹启动成功

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号