| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 数仓4.0(三)------数据仓库系统(续) -> 正文阅读 |
|
[大数据]数仓4.0(三)------数据仓库系统(续) |
四:数仓搭建-ODS层首先,先了解一下ODS层的任务即其功能: 1)保持数据原貌不做任何修改,起到备份数据的作用。 2)数据采用LZO压缩,减少磁盘存储空间。100G数据可以压缩到10G以内。 3)创建分区表,防止后续的全表扫描,在企业开发中大量使用分区表。 4)创建外部表。在企业开发中,除了自己用的临时表,创建内部表外,绝大多数场景都是创建外部表。 4.1?ODS层(用户行为数据)4.1.1?创建日志表ods_log1)创建支持lzo压缩的分区表 (1)建表语句
(2)分区规划 ?2)加载数据---将hdfs中的日志加载到表中,也就是DataGrip中 代码实现:
3)为lzo压缩文件创建索引
?4.1.2 Shell中单引号和双引号区别总结:
?4.1.3 ODS层日志表加载数据脚本(数据转移:hdfs--》DataGrip表中) 1)在hadoop102的/home/atguigu/bin目录下创建脚本
添加如下代码:
代码说明: (1)说明1: [ -n 变量值?]?判断变量的值,是否为空 --?变量的值,非空,返回true --?变量的值,为空,返回false 注意:[?-n 变量值 ]不会解析数据,使用[?-n 变量值?]时,需要对变量加上双引号(" ") (2)说明2: 查看date命令的使用,date --help 2)增加脚本执行权限 3)执行脚本
最后,查看导入数据。 4.2 ODS层(业务数据)ODS层业务表分区规划如下 ODS层业务表数据装载思路如下 ?4.2.1?ODS层业务表首日数据装载脚本(也是hdfs到DataGrip,不过传输的是业务,不是日志--用户行为数据) (1)在/home/atguigu/bin目录下创建脚本hdfs_to_ods_db_init.sh
脚本太长了,就不展示了。 编写完后设置权限 就可以导入数据了。 (2)脚本使用
然后查看是否导入数据。 4.2.2?ODS层业务表每日数据装载脚本(1)在/home/atguigu/bin目录下创建脚本hdfs_to_ods_db.sh
步骤同上。 五:数仓搭建-DIM层(采用维度模型)5.1 商品维度表(全量)5.1.1 商品维度表(全量)1.建表语句:略(代码太长了) 2.分区规划: ?3.数据装载: 这里插入一个问题: 5.1.2 Hive读取索引文件问题(1)两种方式,分别查询数据有多少行
(2)两次查询结果不一致。
解决办法:修改CombineHiveInputFormat为HiveInputFormat
首日装载代码:略 每日装载代码:略 5.2?优惠券维度表(全量)1.建表语句:略 2.分区规划: 3.数据装载: 首日装载代码:略 每日装载代码:略 5.3?活动维度表(全量)1.建表语句:略 2.分区规划: 3.数据装载: 首日装载代码:略 每日装载代码:略 5.4?地区维度表(特殊)1.建表语句:略 2.数据装载:
?数据装载代码:
5.5 时间维度表(特殊)1.建表语句:略 2.数据装载:
1)在DataGrip中创建一张临时表(不是列式存储)
2)将数据文件上传到HFDS上临时表指定路径/warehouse/gmall/tmp/tmp_dim_date_info/,上传后就可以在临时表中查看我们的数据。 该数据文件就是我们要手动导入到DataGrip中的数据。 3)现在要建立一张时间维度表(正式的表),然后将临时表中的数据导入到正式表中 建表语句:(正式表)
4)执行以下语句将其导入时间维度表(HDFS--》DataGrip)
?5.6 用户维度表(拉链表)5.6.1 拉链表概述1)什么是拉链表?
?2)为什么要做拉链表 连接表适合于:数据会发生变化,但是变化频率并不高的维度(即:缓慢变化维) 比如:用户信息会发生变化,但是每天变化的比例不高。如果数据量有一定规模,按照每日全量的 方式保存效率很低。 3)如何使用拉链表 ?通过,生效开始日期<=某个日期 且 生效结束日期>=某个日期,能够得到某个时间点的数据全量切片。 4)拉链表形成过程 5.6.2 制作拉链表?1.建表语句
2.分区规划 3.数据装载 1)首日装载
?2)每日装载 (1)实现思路 ?(2)代码实现:略 5.7?DIM层首日数据装载脚本1)编写脚本 (1)在/home/atguigu/bin目录下创建脚本ods_to_dim_db_init.sh
代码实现:略 设置权限 5.8 DIM层每日数据装载脚本同上。 六:数仓搭建-DWD层DWD层的作用: 1)对用户行为数据解析。 2)对业务数据采用维度模型重新建模。 6.1 DWD层(用户行为日志)6.1.1 日志解析思路1)日志结构回顾 (1)页面埋点日志 ?(2)启动日志 ?2)日志解析思路 6.1.2 get_json_object函数使用1)取出第一个json对象
2)取出第一个json的age字段的值
6.1.3?启动日志表启动日志解析思路:启动日志表中每行数据对应一个启动记录,一个启动记录应该包含日志中的公共信息和启动信息。先将所有包含start字段的日志过滤出来,然后使用get_json_object函数解析每个字段。 ?1)建表语句:略 2)数据导入: ?6.1.4?页面日志表页面日志解析思路:页面日志表中每行数据对应一个页面访问记录,一个页面访问记录应该包含日志中的公共信息和页面信息。先将所有包含page字段的日志过滤出来,然后使用get_json_object函数解析每个字段。 ?6.1.5?动作日志表动作日志解析思路:动作日志表中每行数据对应用户的一个动作记录,一个动作记录应当包含公共信息、页面信息以及动作信息。先将包含action字段的日志过滤出来,然后通过UDTF函数,将action数组“炸开”(类似于explode函数的效果),然后使用get_json_object函数解析每个字段。 1)建表语句:略 2)创建UDTF函数——设计思路? UDTF设计思路:? ?3)创建UDTF函数——编写代码(创建Maven工程,然后打包) 略 4)创建函数 (1)打包 (2)将hivefunction-1.0-SNAPSHOT.jar上传到hadoop102的/opt/module,然后再将该jar包上传到HDFS的/user/hive/jars路径下
(3)创建永久函数与开发好的java class关联
(4)注意:如果修改了自定义函数重新生成jar包怎么处理?只需要替换HDFS路径上的旧jar包,然后重启Hive客户端即可。 5)数据导入:略 6.1.6?曝光日志表曝光日志解析思路:曝光日志表中每行数据对应一个曝光记录,一个曝光记录应当包含公共信息、页面信息以及曝光信息。先将包含display字段的日志过滤出来,然后通过UDTF函数,将display数组“炸开”(类似于explode函数的效果),然后使用get_json_object函数解析每个字段。 6.1.7?错误日志表?错误日志解析思路:错误日志表中每行数据对应一个错误记录,为方便定位错误,一个错误记录应当包含与之对应的公共信息、页面信息、曝光信息、动作信息、启动信息以及错误信息。先将包含err字段的日志过滤出来,然后使用get_json_object函数解析所有字段。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 10:16:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |