数据仓库基础和思想:
- 如何建设数仓,如何构建主题域
- 缓慢变化维 几种处理方式
因为基础信息的变化在做数据归纳和分析出现异常现象,缓慢变化维度(Slowly changing dimension,简称scd),基本上可以通过三种方式对待处理:
- Type 1 SCD :不记录历史数据,新数据覆盖旧数据,有点像oltp中对数据的处理方式,经常应用
- Type 2 SCD: 保存多条记录,直接新添一条记录,同时保留原有记录,并用单独的专用的字段保存区别(通过时间beg_date & end_date 或是有效标志Y/N 唯一标识),通过拉链方式实现。
- Type 3 SCD:添加历史列,用不同的字段保存变化痕迹.它只能保存两次变化记录.适用于变化不超过两次的维度。
- 什么是维度建模,星型模型与雪花模型的区别
建模方法是Kimball最先提出的,其最简单的描述就是按照事实表、维度表来构建数据仓库、数据集市。在维度建模方法体系中,维度是描述事实的角度,如日期、客户、供应商等,事实是要度量的指标,如客户数、销售额等。按照一般书籍的介绍,维度建模还会分为星型模型、雪花模型等;维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。
两个模型的区别:
星型模型:是一种多维的数据关系,它由一个事实表(Fact Table)和一组维表(Dimension Table)组成。每个维表都有一个维作为主键,所有这些维的主键组合成事实表的主键。事实表的非主键属性称为事实(Fact),它们一般都是数值或其他可以进行计算的数据;星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连接,所以数据有一定的冗余
雪花型模型:当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 "层次 " 区域,这些被分解的表都连接到主维度表而不是事实表。通过最大限度地减少数据存储量以及联合较小的维表来改善查询性能。雪花型结构去除了数据冗余;
从数据维度建模的查询性能、模型复杂度、层次结构、以及存储角度,分析两个模型之间的差异性 ,各有优缺点,在同一个项目中 ,各个方法会融合使用。
1、查询性能角度来看
在OLTP-DW环节,由于雪花型要做多个表联接,性能会低于星型架构;但从DW-OLAP环节,由于雪花型架构更有利于度量值的聚合,因此性能要高于星型架构。
2、模型复杂度角度
星型架构更简单方便处理
3、层次结构角度
雪花型架构更加贴近OLTP系统的结构,比较符合业务逻辑,层次比较清晰。
4、存储角度
雪花型架构具有关系数据模型的所有优点,不会产生冗余数据,而相比之下星型架构会产生数据冗余。
维度建模的优缺点:
1、数据冗余小(因为很多具体的信息都存在相应的维度表中了,比如客户信息就只有一份)
2、结构清晰(表结构一目了然)
3、便于做OLAP分析(数据分析用起来会很方便)
4、增加使用成本,比如查询时要关联多张表
5、数据不一致,比如用户发起购买行为的时候的数据,和我们维度表里面存放的数据不一致
维度建模对应的另外一面就是增加一个宽表 ,通过所有的维度和事实构建宽表,解决上面4)里面存在的缺点 。
- 数仓的好处
- 分层的好处
- 怎么做数据质量,怎么保证及时性和准确性
随着大数据的应用,像搜索推荐,广告等的应用,大数据直接应用业务场景越来越多,同时大数据对应业务和产品的正反馈能力也越来越强,对于领导层整体把握公司运营情况,都提供了最直接的支持,如果数据质量不能保证,可想对上层应用的贡献力将会打折扣,甚至陷入负面效果。数据的重要性不言而喻。而且,数据质量是数据分析和数据挖掘结论有效性和准确性的基础,也是这一切的数据驱动决策的前提!如何保障数据质量,确保数据可用性是每一位数据人都不可忽略的重要环节。
那么数据质量应该怎么做才能保证甚至提高数据质量呢?
四大关注点
先简单地聊一下数据质量需要关注的四个点:即完整性、准确性、一致性和及时性。这四个关注点,会在我们的数据处理流程的各个环节有所体现。
一、完整性
完整性是指数据的记录和信息是否完整,是否存在缺失的情况。数据的缺失主要包括记录的缺失和记录中某个字段信息的缺失,两者都会造成统计结果不准确,所以说完整性是数据质量最基础的保障。
简单来讲,如果要做监控,需要考虑两个方面:一是,数据条数是否少了,二是,某些字段的取值是否缺失。完整性的监控,多出现在日志级别的监控上,一般会在数据接入的时候来做数据完整性校验。
二、准确性
准确性是指数据中记录的信息和数据是否准确,是否存在异常或者错误的信息。
直观来讲就是看数据是否上准确的。一般准确性的监控多集中在对业务结果数据的监控,比如每日的活跃、收入等数据是否正常。
三、一致性
一致性是指同一指标在不同地方的结果是否一致。
数据不一致的情况,多出现在数据系统达到一定的复杂度后,同一指标会在多处进行计算,由于计算口径或者开发人员的不同,容易造成同一指标出现的不同的结果。
四、及时性
在确保数据的完整性、准确性和一致性后,接下来就要保障数据能够及时产出,这样才能体现数据的价值。
及时性很容易理解,主要就是数据计算出来的速度是否够快,这点在数据质量监控中可以体现在监控结果数据数据是否在指定时间点前计算完成像支付机构等金融公司对于数据质量应该放在更高的位置,金融机构的数据质量应该与一般的互联网公司有明显的数据质量的方法和严格程度的区别,互联网机构应该与银行金融机构有更高的数据质量层面的关联性,同时来自危机的警示和趋于严苛的监管,共同促使金融机构重新审视提高数据质量的重要性。从最近的支付结算司对新浪支付以及中信银行的处罚可见一斑,重视支付层面的数据质量是必须要做的,而且收益巨大。而且我们坚信,高质量的数据不仅是企业竞争力的关键所在和核心要素,也有助于提高监管部门的信心。
在对外服务的时候我们发现,首选需要确定数据要素,备付金,特约商户信息,以及个人信息的准确性和完整性等 。
核心数据元素确定后,便可对它们的质量进行实时监测,一旦发现问题便可采用 6 Sigma 方法改进业务流程,防范风险。想要量化数据质量,必须首先选取评价的维度,它们称为数据质量维度(data quality dimension)。一个数据质量维度可以定义为描绘该数据在某一方面的质量的属性,比如数据的完整性、一致性、有效性、准确性等。
举个例子,客户年龄是一个数据元素,如果所有的客户在客户年龄这个元素上都有数值,则这个元素在完整性这个属性上的数据质量是满分。但完整性仅仅刻画单一特性,所以我们并不知道用户的年龄是否正确(比如用户 A 可能实际是 30 岁但我们的记录显示为 40 岁)、取值是否有效等(比如我们的记录可能显示用户B的年龄为 -1,这显然是无效的)。因此,需要从多个维度考虑数据元素的综合质量。
量化的数据质量使得我们可以通过统计过程控制(statistical process control)对数据质量进行监测。一旦发现异常值或者数据质量的突然恶化,便根据数据产生的逻辑顺藤摸瓜找到产生数据的业务环节,然后采用 6 Sigma 流程改善中的经典分析方法对业务进行完善,真正的做到有的放矢。
数据是金融机构最重要的无形资产。无论是银行、公募私募基金、互联网金融公司,高质量的数据都是它们赖以生存的前提条件。
数据质量总结:
数据质量优秀 https://www.zhihu.com/question/23120695/answer/434458912
数据质量要发现问题,改进问题,最终要落实到业务过程上。
- 什么是维度,什么是度量
- 如何数据治理?
- 三范式
- 数据仓库vs数据中台vs数据湖
- 做过实时数仓吗,讲一下
-----------------------
Hadoop ,hive 基础和原理
- MapReduce原理,map数、reduce数的参数
- 说一下 map join 与 reduce join
- hive sql怎么优化
- spark和hive的区别
- 数据倾斜几种解决方式
- 数据如何清洗
- 说一下udf、udtf、udaf ,集成的类、接口,怎么写
- hive文件存储格式,对比
- 内外表区别
- hive执行的job数是怎么确定的
Spark 基础和原理
- join 实现有几种呢,源码有研究过吗?底层是怎么实现的
- shuffle形式有几种?都做哪些优化
- 是通过什么管理shuffle中的内存,磁盘的
- 讲讲spark内存模型?说说你了解这些,对实际的工作有什么帮助?
- rdd有哪些特性?
- 宽依赖,窄依赖都是什么?有什么不同?除了大家都认为的不同点以外,还有哪些不同?
- spark为什么比hive快
- 讲讲sparksql优化
提高数据的出数效率,可以提供更高的服务
1.提高数据的并行处理度,分而治之,降低每个节点资源处理的数据量,缩短时效
2.更改SparkSQL的书写规则,提前进行数据过滤,缩小数据集合,增加执行效率
3.通过技术手段,适当增大或是减少数据文件的大小,避免启动过多或过少的map数量,也是并行度的一种方式
4.spark中小表采用广播模式,提高大表与小表的关联速度。
5.通过cache 功能,数据预置内存,增加执行效率(需要集群提供大额可用memory)。
- 讲讲RDD, DAG, Stage
- 说说groupByKey, reduceByKey
- spark是怎么读取文件的?
- 有没有遇到过spark读取文件,有一些task空跑的现象?
- 窗口函数中几个rank函数有啥不同
rank():跳跃排序;1,1,3
dense_rank():连续排序;
row_number():没有重复值的排序(记录相等也是不重复的),可以进行分页使用。
- parquet文件和orc文件有啥不同
parquet 和orc 都是apache 顶级项目 , 且都是列式存储,相比传统的方式存储引擎,列式存储引擎具有更高的压缩比,更少的IO操作;从简单的维度操作看orc 支持 acid 操作,支持update ,且查询性能略高,压缩比也更高些
Shell 高级应用:
- ---------------------------------------------------
- shell 中统计字符串出现的次数
1.第一种方法:使用grep命令进行统计 grep -o '字符串' file |wc -l
2.第二种方法:使用awk命令进行统计 awk -v RS="@#$j" '{print gsub(/字符串/,"&")}' file
3.第三种方法:另一种使用awk命令进行统计的方法 awk '{s+=gsub(/字符串/,"&")}END{print s}' file
- 字符串查找与替换(sed)
sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。
sed 编辑命令主要有:
a:追加 向匹配行后面插入内容
c:更改 更改匹配行的内容
i:插入 向匹配行前插入内容
d:删除 删除匹配的内容
s:替换 替换掉匹配的内容
p:打印 打印出匹配的内容,通常与-n选项和用
=:用来打印被匹配的行的行号
n:读取下一行,遇到n时会自动跳入下一行
r,w:读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件
本文主要回答下替换的使用方法:
sed 's/123/hello/' 1.txt #将文件中的123替换为hello,默认只替换每行第一个123 sed 's/123/hello/g' 1.txt #将文本中所有的123都替换为hello sed 's/123/hello/2' 1.txt #将每行中第二个匹配的123替换为hello sed -n 's/123/hello/gpw 2.txt' 1.txt #将每行中所有匹配的123替换为hello,并将替换后的内容写入2.txt
- 本文逗号分隔输出第二列(awk)
指定特定的分隔符,查询第二列
awk
-F
":"
'{print $NF-1}'
/etc/passwd
获取第12到31行的第一列的信息
awk
-F
":"
'{if(NR<31 && NR >12) print $1}'
/etc/passwd
Python 基础和提高
- 数组和列表的区别,什么是字典
准确来说Python中是没有数组类型的,只有列表(list)和元组(tuple), 数组是numpy库中所定义的,所以在使用数组之前必须下载安装numpy库。 python中的list是python的内置数据类型,list中的数据类不必相同的,而array的中的类型必须全部相同。
- 什么是模块,有哪些内置模块
- 全局变量与局部变量
算法与数据结构:
- 几种排序算法,说一下冒泡排序
- 堆vs栈
- 布隆过滤器
- Bitmap
- B+树
- LSM Tree
- 跳表
- Hyperloglog
SQL 高级应用:
- 手写7日留存
- 手写连续3日登陆
- 1000亿userid如何最高性能求uv
复杂业务场景:
- 讲一个最复杂的业务场景
- 数据赋能,你如何体现数仓职位的价值
- 你能为我们带来什么?
实时应用:
- 实时PV,UV统计
- 实时TOP N 统计
- 广告曝光流和点击流实时join
- Spark Streaming 与Flink的对比
- Flink怎么做到Exactly Once
- Flink的StateStore有哪些,工作中用过哪些
- 做过Flink内存调优吗
- 讲讲Spark Streaming 与Flink的反压机制
- Flink的窗口函数,时间机制,CheckPoint机制,两阶段提交
- Flink 双流Join
- Flink State TTL怎么设置
- Flink 维表关联有哪些方式,数据量大时怎么处理