自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

原创 数据仓库、数据开发面经

目录一、前言二、关于内推or猎头or招聘软件的选择三、面试形式四、面试流程选择五、面试点六、结尾一、前言笔者是19届硕士,以接近硕2的工作经验进行了毕业以来第一次社招的面试,最终结果还不错。经历这两个月的面试,笔者发现在数据仓库、数据开发的面试中,各个公司考察的点大同小异,正好借这个机会写篇文章总结一下,也给大家伙提供一些参考。笔者的基本面试情况:前期大概准备了半个月到一个月,然后从年后进行面试,断断续续一直到4月中旬,总共面试了两个半月左右。二、关于内推or猎.

2021-05-17 17:49:41 1883 1

原创 数据建模-大宽表和事实+维度的区别

什么是大宽表?基于事实表,冗余业务常用的维度以及标签,通过一张表对外提供赋能。优点:1.用户使用方便,通过一张表以及对应标签、维度的筛选就可以得到对应的数据。缺点:1.如果遇到废弃字段、新增字段、修改逻辑等需求,数据开发人员维护成本较高。2.标签口径因为沉淀在大宽表中,不太方便做到口径一致性管理,如果其他事实表用到对应标签,则可能也需要在自身逻辑中做同样的处理,万一逻辑变更且没有通知到位,则容易出现不一致的情况。3.产出时间,平时工作场景中增加字段是比较常见的情况,增加字段对应的可能就是

2021-03-31 11:36:17 4786 2

原创 数据仓库分层的优点

数仓分层优点:1.解耦,降低出问题的风险。2.各层干各层该干的事,使用者根据层名以及对应的需求便可找到所需的数据。3.数据流向规范,避免循环依赖的发生。4.统计计算口径,减少重复开发。5.将问题拆分,放到各层去解决,将复杂问题简单化,每一层都产出不同的数据,有助于问题归因和数据分析。...

2021-03-08 10:08:16 2428

原创 hive sql的执行计划相关知识

大部分写的HiveSQL,最后基本上都可以落到两个角度:1.单表分析:group by+聚合函数,2.多表关联查询,区别只是有的业务逻辑简单一些,有的复杂一些而已:基础知识执行计划的生成步骤:其中Analyzer会和metainfo进行信息交换,去做一些关联查找校验的工作:表存不存在,字段存不存在,字段拼写是否正确等等,最终校验完之后生成query block。谓词下推和map join都发生在逻辑计划优化处,也就是logical optimizer。一般执行计划会分成三..

2021-01-12 12:13:30 668

原创 hive计算本月和上月某个统计值的环比

这篇文章旨在解决相邻两个月的统计值环比问题,比如说指标是饭店的自然月客流量指标,这个指标在月初和月中进行数值环比没有一点问题,但是相邻两个月月末一对比就会出现问题:比如说4月和5月,那么就应该拿5.31号的数据环比4.30号的数据。比如说2月和3月,月末应该拿3.31号数据对比2.28号数据,3.30号数据对比2.28号数据...3.27号数据对比2.27号数据。比如说5月和6月数据,月末应该拿6.30号数据对比5.31号数据,6.29号数据对比5.29号数据。基于以上情况,这里提供一个比较

2020-09-17 12:09:17 2297

原创 hivesql之一行变多行

工作中经常会遇到这类问题:某张事实表中的字段是数组或者是map结构的数据,想把这里面的数据解析出来并且作为新字段和原来的表的表字段一块查看。如果使用split的话,无法将解析出来的元素和原有字段一起观察,所以引出了explode这个udtf,这个函数配合split函数可以将一行数据变成多行数据,例如:select explode(split('123,456,789',','))结果:123456789但是这样还是不能将拆出来的元素拼接到原有表结构中,也就是说以下代码会报错

2020-08-06 20:46:46 2710

原创 hivesql之concat函数字符转义

concat函数功能CONCAT(str1,str2,…)返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。可以有一个或多个参数。但是当我们想要把字段拼接起来时,如果里面有一些会引起歧义的字符,sql在执行时就会报错,一般是(sql解析异常:parse failed. sql semantic error)比如下面这个栗子:select concat('1231232','--额外属性:','2222') ...

2020-08-03 13:44:05 3191

原创 数据建模之总线矩阵

定义:总线矩阵提供一种分解企业DW/BI规划任务的合理方式,行是业务过程,列是公共维度(一致性维度),图表中的X表示的是哪些列与哪些行有关系,也表示这一个业务过程需要有哪些公共维度。先看一个总线矩阵的示例图(出自kimball的书):必要性企业数据仓库总线矩阵是DW/BI系统的一个总体数据架构,如果我们在建立数据仓库的时候,只考虑单独的某个业务系统的数据建设,则无法满足一致性的目标,例如:相互有联系的系统数据的维度不同导致关联复杂或者关联不上,数据之间互相成为了孤岛,对于后期的扩展或者整

2020-07-27 20:40:20 13051 1

原创 数据倾斜的解决方案

目录方案一方案二这篇文章给大家介绍两种数据倾斜的代码层解决方案。方案1:硬编码,将倾斜的值打散。方案2:map join背景:多张表在进行关联时,可能有一个key的值非常多,导致某个reduce处理时间过久,此时产生了数据倾斜。方案一 硬编码方案1是用拆分空值和总量较多的key值进行优化。举例:table 2和table 1关联,key为ucid,table 2 的ucid非常随机,且有一两条ucid为-911的数据,总体没有倾斜。table1的数据中有许..

2020-07-23 15:54:16 518 1

原创 什么是杂项维度?

杂项维度是对低粒度标志和指标的分组。形象的解释就是将一些具有有限枚举值的字段值拼接在一起作为一行或者是多个字段的可能值不进行拼接而是作为多列组合,最后在杂项维度行中呈现。事务型商业过程通常产生一系列混杂的、低基数的标志位或状态信息。与其为每个标志或属性定义不同的维度,不如建立单独的将不同维度合并到一起的杂项维度。这些维度,通常在一个模式中标记为事务型概要维度,一般不需要所有属性可能值得笛卡尔积,但应该至少包含实际发生在源数据中得组合值(不需要所有可能值的笛卡尔组合,至少要包括经常发生的几种状态的

2020-07-20 20:48:50 2213 1

原创 数仓建模知识讨论和分享

这里主要是想和大家讨论讨论数据建模的知识,大家把想了解的一些问题以及对一些问题的见解可以在评论区域发出来,然后我刊登在正文里面,做一个知识集中库。例如:1.数仓建模中的全量表和增量表的区分是什么?答:https://blog.csdn.net/a6822342/article/details/106480314大家热烈讨论呀~...

2020-06-15 10:40:18 341 1

原创 pyecharts渲染图片

这篇文章讲的是mac下的chromedriver和selenium安装。各位同学在上手学习pyecharts时会有将网页上的图片渲染到本地的需求,如以下官方代码:from pyecharts.charts import Barfrom pyecharts import options as optsfrom pyecharts.render import make_snapshotfrom snapshot_selenium import snapshotbar = ( Bar.

2020-06-12 13:34:12 1374

原创 数仓建模-增量表及全量表

判断一张表是增量表还是全量表,我认为有以下步骤:1.这张表是基础数据表还是统计数据表(基础数据表一般来自业务系统的明细记录数据,统计数据表则为基于明细记录数据通过各种统计口径的统计表)。2.判断这张表的同步方式(基础数据表)或者统计主题(统计数据表)。3.根据以上步骤得出这张表是增量还是全量表。举两个例子:第一个例子是基础数据表的例子。1.比如电商每天都会产生用户浏览数据,首先这张表属于基础数据表,如果表存储的就是所有的用户的所有浏览记录,则这张表应该是全量表(这点应该没问题).

2020-06-01 19:48:58 4156

原创 hive表更改元数据之后未选择级联,在查询时spark引擎和hive/tez引擎查询结果不一致问题

最近在工作中遇到一个问题:他人修改了数据表之后(加了两个字段,但是没有选择级联更改),用spark引擎查是可以查到数据,用tez/hive来查新增的两个字段的值是null值。最后发现是分区的元数据和表的元数据不一致导致的,分区的元数据少了新增的两个字段,所以查出来数据是null。下面是两段代码,分别查表的元数据信息和分区的元数据信息:#查表的元数据信息desc table_name;#查对应分区的元数据信息desc table_name partition(分区字段='分区值')对比

2020-05-11 20:41:30 1231

原创 工作经验分享|你在工作中应该注意什么?

上一篇文章我分享了我在工作之余的一些丰富生活的方法工作之余,如何丰富生活?那这篇文章我来讲一讲我工作之中总结到的一些经验,希望能给刚步入工作的你一些帮助,有些见解不对的地方还请批评指正。首先我理解对于一个校招生来说,有三个阶段:1.刚入职,什么也不会,主要还是熟悉工作方式。(0个月到2个月)这个阶段主要还是要多学,多问。在学习过程中,注意总结沉淀,最后形成的产物可以分享,...

2020-05-04 10:17:15 951

原创 工作之余,如何丰富生活?

我呢,参加工作的时间也不短了。读书的时候经常和已经工作的同学聊天,他们经常说工作比较累,平常晚上回去就看看手机睡觉了,周末一般也是待在家里宅着。我有问过他们为什么周末不出去逛逛的原因,基本上我听到的回答都是说平常工作就很累了,早起晚归的,周末好不容易抓住一些时间,还是好好休息比较舒服。当时我就想,为什么会这样呢?真的会这么累吗?当时作为学生的我不是很理解这种想法,对这种生活方式比较排斥,心...

2020-05-04 09:22:21 821

原创 pandas学习之DataFrame

上一节学习了Series相关的概念,这部分的知识是学习pandas另一数据结构:DataFrame的基础。DataFrame是二维的、有标记的数据结构,它可以具有可能不同类型的列。可以将其看做类似SQL表格,或者包含多个Series对象的字典。DataFrame可以接受多种数据输入: 由一维ndarray构成的字典, 列表, 字典, 或者是Series 二维的ndarr...

2020-03-24 18:57:37 387

原创 pandas学习之Series

搞机器学习、数据可视化这方面的工作、学习,pandas应该是必须要学习的内容。pandas有两大数据结构:series以及dataframe。这一篇文章写一些关于series的相关知识。官方学习资料:https://pandas.pydata.org/pandas-docs/stable/getting_started/dsintro.html(下面代码的例子取自官网)ser...

2020-03-23 23:24:20 398

原创 星型模型和olap多维数据库

首先明确一个概念,星型模型只是种模型,不是一种实际存在的数据实体,它是将事实表和维度表通过外键组合起来的一种模型,一种建模方式。而olap多维数据库是真实存在的一种数据形式,源自星型模型,通过星型模型的构建理念得到的事实表和维度表关联之后的数据集合,它具备许多不同的分析角度的维度,方便分析人员进行不同维度、不同需求的数据分析。例如OLAP Cube的概念,它是将星型模型做多维预计算处理,形...

2020-02-06 10:14:35 2394 2

原创 OLTP和OLAP的区别(个人理解)

在刚接触数据建模的时候,我对这两个概念也不是熟悉,只知道数据仓库中有olap类型的表,适合数据分析人员进行数据的上卷下钻(根据一定的维度属性进行数据统计)而一般的事务数据库的表类型是oltp,主要用于事务处理,后面慢慢了解之后才知道olap和oltp的区别。oltp是On-Line Transaction Processing:联机事务处理,olap是On-LineAnalytical Pr...

2019-12-22 19:07:58 6313 1

原创 数据建模理论小结:Inmon和Kimball

看了这么多数仓模型的对比文章,我想把我总结的一些东西记录下来。说到数仓建模,那么肯定离不开两种方式:范式建模(Inmon)和维度建模(kim ball)。这两种方式各有适用的地方,需要根据具体应用场景进行选择。当然还有一种独立数据集市的方法,不过这种方法容易造成很多数据烟囱以及数据孤岛(没有一致性维度和一致性事实的支持,是无法支持支持多主题区域,并且使得各个数据集市成为信息孤岛,缺乏兼容...

2019-12-21 13:06:07 4525 5

原创 python中list赋值问题

有些时候我们在for循环中想把某一个list或者dict赋值给一些元素,比如下面这种场景:我们想得到的是lst2的值是[0][0, 1][0, 1, 2][0, 1, 2, 3][0, 1, 2, 3, 4]但是结果是[0, 1, 2, 3, 4][0, 1, 2, 3, 4][0, 1, 2, 3, 4][0, 1, 2, 3, 4][0, 1, 2, 3, ...

2019-12-19 23:38:46 1379

原创 什么是可加,半可加,不可加事实?

众所周知,数据仓库的事实表中是有数字度量的,一般会根据这些数据度量以及提前规定好的一致性维度来进行统计等工作。那么事实表中的数组度量分三种:1.可加事实,2.半可加事实,3.不可加事实下面让我们来看看它们的定义与区别1.可加事实可加事实指的是该度量可以按照和事实表关联的任一维度进行汇总。比如商品的单价,可以按照品类维度进行汇总,按照店铺维度进行汇总等等。2.半可加事实...

2019-10-06 13:11:20 4941

原创 hive数据倾斜及其解决方案

现在常见的数据倾斜分两种情况,一种是大量的空值导致的,另一种是一对多的情况造成的,下面分别说一下这两种的解决方案。1.空值这种情况下比较好解决,有两种解决方式,使用哪一种具体取决于你需不需要主键为空值的该行纪录的其它信息,因为有些时候这些信息也有用处。下面是伪代码:1.这种情况在join的时候直接过滤空值,最后给union all上select * from a jo...

2019-09-11 19:58:21 722

原创 缓慢变化维学习

一开始看到这个词的时候给我的第一印象就是拉链表,缓慢变化表拥有从表创建开始到现在的所有数据,包括状态变化的数据。那么什么是缓慢变化表呢?首先要来了解一下什么是缓慢变化维,就是在业务进行过程中,会发生变化,但又不会频繁变化的维度。假如现在有一张员工表,里面有A,B,C三位员工,里面纪录了员工的一些基本信息,例如工作地点,职级,员工id等信息。 员工id ...

2019-09-06 11:19:52 448

原创 如何设计一张事务事实表?

根据书籍:大数据之路,设计一张事务事实表的步骤分以下几步:1.选择业务过程在设计事实表的时候,首先得知道这张事实表要记录什么事实,也就是说,对应的业务过程是什么,是关于下单这个业务过程,还是支付还是交互之类的。2.确定粒度业务过程选定以后,就要针对每个业务过程确定一个粒度,即确定事务事实表每一行所表达的细节层次。(以“组织结构”为例,比如一个层级结构式:总公司,分公司,...

2019-09-05 11:44:09 2348

原创 什么是退化维度?

退化维度的维度表可以被剔除,从而简化维度数据仓库的模式。因为简单的模式比复杂的更容易理解,也有更好的查询性能。当一个维度没有数据仓库需要的任何数据时就可以退化此维度。需要把退化维度的相关数据迁移到事实表中,然后删除退化的维度。维度属性也可以存储到事实表中,这种存储到事实表中的维度列被称为“退化维度”。与其他存储在维表中的维度一样 ,退化维度也可以用来进行事实表的过滤查询、实现聚合操作等。那...

2019-08-30 16:59:41 22591 5

原创 什么是全量表,增量表,快照表,拉链表?

这一篇文章我们的目的是搞懂这四种表的概念,闲话不多说,直接看文字。全量表全量表没有分区,表中的数据是前一天的所有数据,比如说今天是24号,那么全量表里面拥有的数据是23号的所有数据,每次往全量表里面写数据都会覆盖之前的数据,所以全量表不能记录历史的数据情况,只有截止到当前最新的、全量的数据。快照表那么要能查到历史数据情况又该怎么办呢?这个时候快照表就派上用途了,快照表是有时间...

2019-08-24 11:52:56 26242 7

原创 MAC环境下每次打开sublime都是新建窗口解决办法

每次新把文件夹设置为project之后,然后点击左上角的关闭按钮,下一次打开之后又是一个新的空界面,之前添加的project信息也是空的,原因是什么呢?因为我们每次关闭都是手动的点击左上角关闭按钮,如果想要保存原有的project信息以及文件信息或者说上一次的工作状态的话,需要用command +q退出。...

2019-08-23 16:33:54 1591 2

原创 事实表的分类:事务事实表,周期快照事实表,累计快照事实表

维度建模数仓领域中的事实表大致分以下三种:事务事实表,周期快照事实表,累计事实表。事务事实表与周期快照事实表、累积快照事实表虽然使用相同的一致性维度,但是它们在内容构成以及业务描述上还是有很大的区别。1.事务事实表事务事实表记录的事务层面的事实,保存的是最原子的数据,也称“原子事实表”。事务事实表中的数据在事务事件发生后产生,数据的粒度通常是每个事务记录一条记录。一旦事务被提交,...

2019-08-11 14:41:01 21265 6

原创 原子指标和衍生/派生指标

按照个人的理解,不加任何修饰词的指标就是原子指标,也叫度量,一般存在于olap表中,例如订单量,用户量的等等。而在原子指标上进行加减乘除或者修饰词的限定等等都是派生指标,衍生/派生指标=原子指标+时间周期+修饰词例如:近7天订单量,近7天北京市的订单量,近1个月北京市的新增用户数,近7天的订单成交率等等。当然,通过原子指标加减乘除得到的指标也是衍生指标。...

2019-08-03 00:52:17 16253 2

原创 Spark的map和flatmap的区别

最近学习spark,然后遇到了这么一个题,有如下数据:http://bigdata.edu360.cn/laozhanghttp://bigdata.edu360.cn/laoduanhttp://javaee.edu360.cn/xiaoxu要统计最受欢迎的老师,然后我就试了一下map和flatmap这两个算子,结果如下:flatmap的结果map的结果map得出的结果和我的...

2019-04-09 14:57:29 1080

原创 毕业论文调格式之页码,页眉页脚,目录页码右对齐

前言相信大家在毕业季的时候为了调文章的格式有苦恼过吧。下面给大家带来一些我最近搜到的、或者总结到的一些关于页眉页脚,页码和目录的一些链接和心得。调整页眉页脚https://jingyan.baidu.com/article/d2b1d1026cb7d65c7f37d46f.html如果没调好就要注意是不是和前一节链接起来了。调整页码http://www.wordlm.com/html/...

2019-04-01 10:11:25 5219

原创 Latex中插入用origin绘画的两条坐标轴,双x轴或者双y轴拥有不同刻度的图片

先上效果图,如果所示,上面x轴的刻度从20-30,下面x轴的刻度从0-6,这样就达到了上下两条x轴显示不同刻度的目的。下面我们说一下怎么做到的,其实比较简单,通过添加一层图层,就可以做到了,也就是说上方的x周和下方的x轴不在一个图层,所以它们各自变化刻度的时候互相没有影响。至于右边的y轴怎么显示出来的(它和左边y轴,下方x轴在同一个图层),请看我的这篇博文:Origin中画折线图实...

2019-03-26 10:14:16 15512 4

原创 标量、向量、矩阵求导(两种布局方式)

问题引入首先以一个网上很多博文引用的例子来开篇,例子见下图问题初试在了解向量和向量求导的时候,我看过以下一些公式:首先Ax是个m维的列向量,它对x求偏导是个列向量对列向量求偏导的格式,所以可以套用上述公式(10),那么得到的是:那么就转换成了标量对向量的求偏导的形式了,可以套用上面的公式(5),于是化简成接下来的样子:这样最后得到的化简结果是一个m*n维的列向量和网上得到的答...

2019-01-11 14:00:00 7536 26

原创 idea用maven3.6.0下载源码失败(ubuntu环境下)

今天在代码里面想看看jama包下部分代码,但是点击Download Sources提示在idea环境下不行,提示Cannot download sources Sources not found for:XXX.jar我用的maven版本是3.6.0,后来上网查了一些资料,发现可能是maven版本的问题,随后换成了3.2.9,改了一下环境变量以及idea中的maven路径的设定,然后就可以下载...

2019-01-09 11:03:18 800

原创 AbstractQueuedSynchronizer(aqs)中acquireShared和releaseShared的理解

上一篇我们看了aqs中独占模式下acquire和release的代码(https://blog.csdn.net/a6822342/article/details/84839391)。下面我们来看看共享模式下的acquireShared和releaseShared的代码。首先先看acquireShared的代码public final void acquireShared(int arg...

2018-12-07 15:30:09 4699

原创 AbstractQueuedSynchronizer(aqs)中acquire和release的理解

Aqs有两种模式,一种独占模式,一种共享模式,他们获取资源的方法分别对应acquire-release、acquireShared-releaseShared(见此博文 https://blog.csdn.net/a6822342/article/details/84875304) 这篇文章我们来看看独占模式下的获取资源和释放资源的代码。 先来看acquire的源码 ...

2018-12-05 17:04:23 1165

原创 错误:Unable to initialize MapOutputCollector的解决办法

我是因为把我自己定义的bean当成key从map端传到reduce端了,但是我没有针对实现的WritableComparable接口,而是实现的Writable和Comparable接口(讲道理WritableComparable接口也是对这两个接口做了整合,为什么我分别实现就不行呢?),然后报了这个错误。这种错误有两种原因,一个是网上说的导包错误,比如Text是要导hadoop.io下面的,...

2018-10-28 23:22:44 2715

原创 从一个例子来看java类的初始化过程

我从网上找了一下例子,然后把它放在idea里面debug,它的大体顺序是这样的首先是类的静态方法,再是类的静态变量,然后是创建静态对象,创建静态对象的时候,首先是非静态的成员,(但是在这里它因为后面的静态变量还没初始化,所以创建静态对象的时候,它不对里面的非静态变量进行初始化),非静态语句块的执行,在加载时按代码的先后顺序进行,然后创建完静态对象之后,继续初始化后面的静态变量以及静态块,完成初...

2018-10-06 14:26:16 230

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除