【数仓】RPT层搭建
Pseudocode
手撸RPT层代码.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176-- RPT 层搭建Step1:销售主题统计宽表需求一:门店月销售单量排行, 按月统计,各个门店的 月销售单量tim ...
【数仓】数仓DM层搭建
Data Market销售主题统计宽表手撕代码PseudocodeTips:Please follow these steps before you start your project !Code12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394-- 基于DWS层销售主题日统计宽表的值,上卷出年月周日的销售主题统计宽表(年月周日)-- 动作一:求八种维度组合情况step1:梳理表关系(指标和DWS一致,需要与dwd.dim_date 时间维表相关联)-- 整个表和DWS层销售主题统计宽表dws_sale_daycount的区别就在于多了开头的时间粒度字段-- 改造1,dim_date日期维度表字段太多,抽取出要用的字段,放到CTE表达式中, 最后join.with dd as ( ...
【数仓】数仓DWS层搭建(续)及索引
本次主要是干DWS层的另外两个宽表,商品主题日统计宽表和用户主题日统计宽表。因为是销售商品给用户,而且销售主题日统计宽表在上次已经干完了,这另外两个宽表基本换汤不换药。还有MySQL的索引之类的一些东西,让我认识到SQL也是有性能(效率)的评级的,网上可以搜到MySQL的评级分类,以后基本将自己的SQL优化到const这种效率的SQL就很牛了。
Hive相关配置参数12345678910111213141516171819202122232425262728293031323334353637--分区SET hive.exec.dynamic.partition=true;SET hive.exec.dynamic.partition.mode=nonstrict;set hive.exec.max.dynamic.partitions.pernode=10000;set hive.exec.max.dynamic.partitions=100000;set hive.exec.max.created.files=150000;--hive压缩set hive.exec.compr ...
【数仓】数仓DWS层搭建及函数增强
123456端口号9870 HDFS端口号端口号7180 clouder manager 集群管理软件端口号8889 Hue的web界面端口号8090 Presto的webUI界面端口号19888 Yarn历史服务端口号8088 ResourceManager的web界面
维度之间的关系
维度之间存在并列和递进包含的关系。
比如列出以下维度组合:(日期,城市,商圈,店铺,品牌,大类,中类,小类)
总共可以得出2的8次方总共256种组合。这里分为
日期,
日期,城市
日期,城市,商圈
日期,城市,商圈,店铺
品牌
品牌,大类
品牌,大类,中类
品牌,大类,中类,小类
比如:日期,城市,商圈,日期和后面的两个属于并列关系。
但是城市和商圈属于递进包含关系。因为属于一个商圈的那必然属于一个城市。
从而日期,城市,商圈可以简写为日期,商圈
例如: 日期+城市 去掉城市, 影响分组结果, 所以: 日期和城市是并列关系.例如: 日期+城市+商圈 去掉城市, 不影响结果, 属于同一个商圈的一定属于同一个城市.递进包含关系
主题需求
指标
123销售收入、平台收入、配送成 ...
【数仓】ODS,DWD层搭建及拉链表
本文主要讲了数据抽取分为全量和增量抽取,以及拉链表的具体实现。
拉链表的公式:(旧的拉链表 left join 增量数据) union all 增量数据。
数据流向:业务数据库-> ODS,ODS->DWD
Hive中解决乱码问题在MySQL中执行如下命令
123456789-- 注意 下面sql语句是需要在MySQL中执行 修改Hive存储的元数据信息(metadata)use hive;show tables;alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ;alter table PARTITION_KEYS modif ...
【数仓】数仓DWB层搭建+Presto
本文主要解决搭建数仓的过程中遇到的一些自关联查询,多表联查,join错位问题。
DWB(DataWarehouse Base)
名称:基础数据层、中间数据层
功能:退化维度(Degenerate Dimension-DD)(降维)形成大宽表
功能
通过退化维度操作之后,带来的显著效果是
整个数仓中表的个数减少了;
业务相关联的数据(跟你分析相关的)数据字段聚在一起了,形成一张宽表。
分析查询时的效率显著提高了:多表查询和单表查询的差异。
带来的坏处是
数据大量冗余、宽表的概念已经不符合3范式设计要求了。
但是数仓建模的核心追求是,只要有利于分析,能够加快数据分析,都可以做。
订单明细宽表 dwb_order_detail
店铺明细宽表 dwb_shop_detail
商品明细宽表 dwb_goods_detail
订单明细宽表fact_shop_order注意
1,如果表是一张拉链表,加上过滤条件 end_date=’9999-99-99’,把当前有效的数据查询出来
2,对于fact_shop_order的end_date=’9999 ...
【Java查漏补缺(一)】数组与循环
除了数组与循环,还有方法,讲究看吧!后续练习内容都是连贯的!
命名规范: 再本文的后面,参照阿里的Java编程公约写的.其中强制是必须要遵守的,推荐的最好遵守.
Basical Java
看下Java中的变量类型吧!
数据类型
关键字
内存占用
二进制位数
字节型
byte
1个字节
4位
短整型
short
2个字节
8位
整型
int(常用)
4个字节
32位
长整型
long
8个字节
64位
单精度浮点数
float
4个字节
32位
双精度浮点数
double(常用)
8个字节
64位
字符型
char
2个字节
8位
布尔类型
boolean
1个字节
4位
注释
常见的注释有三种类型:
单行注释: //
多行注释: /* */
文档注释: /** */
常量
自定义常量(目前先了解, 在面向对象的时候, 才会详细解释)
字面值常量
整数常量: 如 1,2, 3, 4, 5
小数常量: 例如: 5.21, 13.14
字符常量: 字符常量通常用单引号引起来, 例如: ‘A’, ‘B’, ‘c’
字符串常量: 字 ...
【数仓】建模与分层
本文涉及拉链表的理论知识Slowly Changed Dimension(缓慢渐变维)
数仓Data WareHouse是么是数仓?数据仓库是面向分析的集成化数据平台,分析的结果给企业提供决策支持。
数仓的应用场景是什么?满足企业中所有数据的统一化存储,通过规范化的数据处理来实现企业的数据分析应用。
简而言之就是分析数据的。
数仓的4大核心特点1,面向主题性
主题(Subject) 是在较高层次上将企业信息系统中某一分析对象(重点是分析的对象)的数据进行整合、归类并分析的一种范围,属于一个抽象概念。
2,集成性
数据仓库不产生数据也不使用数据
只会实现存储和加工
3,非易失性
数仓上面的数据几乎没有修改操作,都是查询分析的操作。
数仓是分析数据规律的平台 不是创造数据规律的平台。
注意:改指的数据之间的规律不能修改。
4,时变性
数仓是一个持续维护建设的东西。
站在时间的角度,数仓的数据成批次变化更新。如一天一分析(T+1) 一周一分析(T+7)
OLTP和OLAP区别OLAP(联机事务处理系统)核心:事务支持
代表:RDBMS关系型数据库管理系 ...
Apache Sqoop正确使用方式
Summary(提炼):
在玩Sqoop时候最重要的是搞清楚到底是数据导入还是导出,抓不住这点你就是迷迷糊糊的(不是我)
import == 是mysql导入数据到Hive,HDFS,HBase
export == 刚好相反
对于Sqoop我的建议是记住一两个常用的数据导入方式(通过HCatlog将数据从mysql导入到Hive)
Linux中手动进入Hive二代客户端的命令:
beeline
!connect jdbc:hive2://hadoop01:10000 (注意!和connect中间可以没有空格)
Tips:Swoop是在Linux中直接执行的
数据导入数据导入-MySQL到HDFS指定分隔符
将数据从MySQL的userdb数据库的表tmp导出数据到HDFS上,
并指定存储位置为/sqoop/result2以及分割符为\t
1234567sqoop import \--connect jdbc:mysql://hadoop01:3306/userdb \--username root \--pa ...
数仓项目需求及技术架构
Interview Summary1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283841,请简述你常用的Linux命令. # df -h, free... 2. 大数据的特点是什么? # 5V(大多值快信) 3. namenode是如何管理datanode的? # 心跳机制, 副本机制, 负载均衡. 4. HDFS的默认副本数是3, 那么这3个副本是如何存储的呢?5. Hive的三种部署方式, 内嵌模式, 本地模式, 远程模式的区别是什么? # 需不需要手动开启metastore(元数据服务) # 是否可以使用第三方的数据库 # 是否可以实现共享... 内嵌模式: 不需要, 不能, 不能. 本地模式: 不需要, 能, 能(metastore服务不能 ...