ETL工程师面试题

项目问题:
1.每天抽取数据10+怎么抽取

每天抽取数据10+的方式取决于数据的来源和结构。以下是一些通用的方法:

使用数据库查询语言(如SQL)从数据源中检索数据。你可以编写查询语句以根据特定的条件和限制抽取所需的数据。
使用数据提取工具或库,如Python的Pandas库。这些工具和库提供了方便的方法来连接数据库,筛选和读取数据。
编写程序或脚本(如Python脚本)来自动化数据抽取过程。你可以编写程序来连接到数据库,读取表或视图的数据,并将其转换为所需的格式。
使用ETL(提取、转换、加载)工具,如Apache NiFi或Talend。这些工具提供了用于抽取、转换和加载数据的流程和组件,可以方便地设置和管理数据抽取任务

2.一般怎么把数据进行一些码值转换
数据的码值转换通常涉及以下几种情况:

数据编码:将数据转换为特定的编码格式,如ASCII、GBK、UTF-8等,以便在计算机中存储和传输。在进行数据编码转换时,需要确定源数据的编码格式和目标编码格式,并使用相应的编码转换函数进行转换。
数据位数转换:将数据的位数从一个数值系统转换为另一个数值系统,如将十进制数转换为二进制数、八进制数或十六进制数。在进行数据位数转换时,需要确定源数据的数值系统和目标数值系统,并使用相应的位数转换函数进行转换。
数据类型转换:将数据从一个数据类型转换为另一个数据类型,如将字符串转换为整数、浮点数等。在进行数据类型转换时,需要确定源数据的数据类型和目标数据类型,并使用相应的类型转换函数进行转换。
数据格式转换:将数据从一个数据格式转换为另一个数据格式,如将CSV格式转换为JSON格式、XML格式等。在进行数据格式转换时,需要确定源数据的数据格式和目标数据格式,并使用相应的格式转换函数进行转换。

3.用kettle调用存过

在Kettle中,可以使用“调用存储过程”步骤来调用存储过程 。下面是一个简单的例子,展示如何在Kettle中调用存储过程:

创建一个转换。
在新创建的转换中添加“表输入”步骤。
在“表输入”步骤中添加“调用DB存储过程”步骤。
在“调用DB存储过程”步骤中,填写存储过程的名称和参数等信息。

4.数据你们公司数据量有多大

 增量数据10万+  全量数据10亿+

5.数据仓库的架构(数据仓库的分层)分三层

数据仓库三层结构是一种经典的数据仓库架构模式,它将数据仓库分为三个层次进行设计和实现,分别是数据源层、数据处理层和数据存储层。数据源层提供数据来源,数据处理层负责数据处理和转换,数据存储层负责将处理后的数据存储到数据仓库中。这种模式的好处是各层功能明确、易于实现和维护,可以提高数据仓库的性能和可扩展性。同时,这种模式也符合模块化设计的思想,可以使不同的模块负责不同的功能,从而提高代码的重用性和可维护性。因此,数据仓库三层结构在实践中得到了广泛应用,成为企业决策支持系统中不可或缺的一部分。

ods:把业务系统的数据抽取到数据仓库里(财务系统 核心业务系统
客户关系系统 人力资源管理系统)
dw:ods层数据清洗转换之后存放到dw层(去除后续不需要的字段 去重 去空格
码值转换 统一字段类型)
App:dw层的数据根据业务需求的指标进行存储过程的编写,用作后续分析使用
(编写分析报告 制作报表)
6.组内人员构成:
组长 etl 开发 需求 数据分析 bi

7.在工作中写过那些表
资产负债表、利润表、现金流量表、固定资产明细表等

比较复杂的存过(难点)
根据客户忠诚度来分级,首先根据需求得到与银行忠诚度的相应算法
根据指标名、指标值、分值、权重等计算出一个得分,然后将表中的数据进行分析筛选得到需要的字段,
这些字段分布在不同的表中,通过表连接将这些表连接在一起,用case when
进行指标分级,然后将查询出来的结果集子查询,最后通过各指标的权重进行计算得到每个用户的最终分值
8.解决死锁的方法有哪些?
sql server 自动检测和消除死锁
设置死锁优先级
设置锁定超时
使用更新锁,避免死锁
如果数据库错误,发生死锁:有问题一般反馈给运维
9.优化的核心思想
减少物理I/O的扫描次数,根据这个原则去对sql进行排查和优化
首先打开执行计划然后重点查看带的地方,如果有表连接查看执行计划的表连接方式
如果是小的结果集,看NL的驱动表是否是小表(返回行数少的表),再看被驱动的表上面是否有索引,如果没有,去加上索引,提高效率
如果是较大的结果集,看表连接是否为hash join,避免出现在较大结果集中使用NL的情况,如果出现超大表和超小表的hash join,一定要让小表进行广播(Broadcast)
对于不等值连接,同时结果集比较大,可以考虑sort merge join,但这种表连接方式对于系统性能消耗比前面两种要更多,因为需要排序
10.优化方面
sql语句尽量用大写
select句中避免使用

减少访问数据库的次数
Where条件筛选一般在索引列
带有union、minus、intersect的sql语句都可以用其他方式重写
尽量多使用commit
优化group by可以通过将不需要的记录在group by之前过滤掉
用where子句替换having子句
用索引提高效率
用>=替代>
避免在索引列上使用not,避免在索引列进行计算
11.分区表
种类:范围分区:最常用,一般以日期为分区键
hash分区:在列的值没有合适的范围条件
列表分区:根据分区值来指定分区
组合分区:范围分区+hash分区 范围分区+列表分区
12. 11g 19c 9.0

13.表空间 5个
系统表空间:主要包括数据字典、pl\sql程序单元以及所有方案对象的定义
sysaux表空间:作为system表空间的辅助表空间
临时表空间:用于暂存一些复杂的sql查询语句运行时产生的临时数据
撤销表空间:由oracle自动分配管理,一个实例在一个时刻只能使用一个undo表空间
用户表空间:用来存放用户数据
永久性表空间:一般保存表、视图、过程和索引等的数据。
临时性表空间:只用于保存系统中短期活动的数据。
撤销表空间:用来帮助回退未提交的事务数据。
14.linux常见命令
grep 正则 awk sed (vim+grep) cat find mkdir rmdir
查看磁盘空间cpu或者内存使用情况: df du
常用的linux操作系统:redhat 红帽 hp-unix
linux操作系统中的常用命令
ls、cd、pwd、mkdir、rmdir、cp、rm、mv、cat、tac、nl、more、less、head、tail、df、du、seq、chmod、echo、wc、sort、su、find、zip、unzip、gzip、ps、grep、sed、awk等
查看前100行后100行 head -100 tail -100
15.常用的表有哪些,数据量有多大
资产表、客户表、现金流水表、流水表 50+
16.经常使用的字段
客户编码、客户类别、客户名称、证件类型、证件号码、客户性别、开卡时间、电话号码
17.对客户怎么分层
根据客户开户日期做细分,为客户打账龄属性标签,<=3个月的为新客户,>3个月<12个月为待开发客户,>36个月的为老客户,其余的为熟悉客户
18.kettle经常使用的
输入输出、获取系统信息、维度查询/更新、字段选择、增加常量、排序记录、增加序列、19.什么是数据抽取
从源数据系统把数据抽取到ods层或者dw层中
20.如何数据清洗
把不需要的、不符合规范的进行处理(空值处理、校验准确性、规范格式、数据转码、数据标准)
21.转换加载
数据刷新,就是把每天抽取过来的数据更新到通过模型设计好的表中,如事实表、维度表、汇总表等,更新这些表的存过都是开发好的,个人认为这些合并增删改的过程都叫加载
22.索引用在什么地方
一般加在经常检索的字段的列
23.索引分类
B树索引:一般用
位图索引:在列中值高度重复时用
24.索引优缺点
索引优点:加快索引速度、加速表之间的连接、分组排序是减少查询时间、唯一索引保证每一行的唯一性
索引缺点:占用物理空间,对表进行增删改合并时索引也跟着动态维护,降低效率
25.索引失效
有or会失效,对索引字段进行计算,not in,null,not null

26.使用索引一定会增加效率嘛
不一定
27.维度建模中的两种表模型
事实表:指分析主题所有对应的表或者需求所有对应的表或者指标计算字段所在表
特点:一般是由外键(其他表主键)的聚集的表
维度表:在对事实表根据各个维度进行统计分析的时候,可能需要关联上其他的表,此时其他的表一般称为维度表
在一些特殊的情况下,有一些表既是当前的事实表,又是其他主题的维度表
28.常见的建模方式
三范式建模
以业务为导向,在建表时,表应该有一个主键,尽可能避免数据的冗余情况发生
维度建模
以分析为导向,构建表时,是要能够满足分析的要求,能够让目标分析更加简单,在利于分析的要求下,允许数据出现一定的冗余
29.数仓发展的三种发展模型
星型模型:只有一个事实表,也就是只有一个分析的主题,有多个维度表、多个维度表之间没有任何关联
什么时期容易产生:中期
雪花模型:只有一个事实表,也就是只有分析的主题,有多个维度表,维度表可以接着关联其他维度表
什么时期容易产生:数仓出现了畸形的情况下,有可能产生模型,这种模型下,非常不便于维护和分析,在实际使用尽量避免这种模型出现
星座模型:有多个事实表,也就是有多个分析的主题,有多个维度表,在条件复合的情况下,多个事实表之间的维度可以进行公用
多个星型模型构成的星座模型
星型模型和雪花模型的区别:星型模型是事实表直接连接维度表,雪花是直接或间接连接
30.主键索引和唯一索引的区别
相同点:都属于实体完整性约束
不同点:唯一性索引所在的列允许空值,但是主键约束所在的列不允许空值
可以把唯一性约束放在一个或者多个列上,这些列或列组合必须有唯一性,但唯一性约束所在的列并不是表的主键列
唯一性约束强制在指定的列上创建一个唯一性索引,在默认情况下,创建唯一性的非聚簇索引,但也可以指定所创建的索引是聚簇索引
建立主键的目的是让外键来引用
一个表最多只有一个主键,但可以有很多唯一键
31.触发器
DML触发器、替代触发器、系统触发器、DDL触发器、登录触发器
触发器是一种特殊的存储过程,在插入删除或修改特定表中的数据是并发执行的,
比数据库本身标准的功能有更精细更复杂的数据空值能力
可以驾驭数据库中的数据或时间限制用户的操作
可以跟踪用户对数据库的操作
实现复杂的数据完整性规则
能同步实时的复制表中的数据

32.存储过程中的异常处理
exception when 异常名1 then…;when 异常名2 then…;end;
预定义异常:有名字,有异常描述
非预定义异常:没名字,有描述
自定义异常:想要什么名字自己起
33.游标
静态游标:显示游标和隐式游标
动态游标:强类型和弱类型
主要应用在数据批量更新或删除
34.存储过程和函数的区别
函数有return,存过没有
存过可以调用函数,函数不可以调用存过
存过用来实现某种操作或者业务,函数用来实现某种功能
DML一般用存过
如果返回值超过一个,一般用存过
35.存储过程和触发器的区别
1.存储过程时已经创建并存储在数据库中的SQL语句,可以重复使用,而触发器是一种特殊的不是又用户直接调用的存储过程创建触发器时,会定义在针对特定表或列进行特定类型的数据修改时触发
2.用户可以直接调用或执行存储过程,但是无法直接调用或执行触发器
3.存储过程可以采用输入参数,而触发器不能将参数作为输入我们不能将参数作为输入传递给触发器
4.存储过程可以返回零或N个值,触发器无法返回值
5.可以在存储过程中使用事务,触发器内不允许进行事务处理
6.存储过程通常用于执行用户指定的任务,触发器通常用于审计工作
36.常用的函数:
sum、count、substr、sum()over()、rank()over()、row_number()over()
37.锁表
造成锁表的原因:一个程序执行了对一个表的INSERT,并且还未COMMIT提交,另一个程序也对同一个表进行INSERT,则此时就会发生资源正在忙的异常
解除锁表的方法:查看被锁的表是由哪个用户造成的死锁,然后查看简洁的进程查出锁定表的SID,最后杀掉进程SID
减少锁表概率的方法:减少INSERT,UPDATE,DELETE语句到COMMIT之间的时间,具体可以把批量执行改为单个执行、优化SQL自身的非执行速度
38.视图
视图和表不同,视图是已经编译好的SQL语句,没有实际的物理记录,只是逻辑概念上的存在。
表可以及时修改而视图只能修改创建视图的语句,如果表时内容的话视图就是窗口。可以合并分离的数据创建分区视图,更安全。
视图的建立和删除只影响视图本身,不会影响对应的基本表,工作中我们一般部直接修改视图
优缺点:使用视图可以指定用户数据,聚焦特定的数据,简单化数据操作,使基表中的数据有一定的安全性,可以合并分立数据,创建分区视图。
但是视图性能差,修改有限制
39.数据备份:exp imp
40.oracle的job
job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。
而且oracle重新启动后,job会继续运行,不用重新启动。
最重要的字段就是job这个值就是我们操作job的id号,
what 操作存储过程的名称,
next_date 执行的时间,
interval执行间隔
41.拉链表
拉链表是一种数据模型,主要是针对数据仓库设计中表存储数据的方式而定义的,
顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。
拉链表可以避免按每一天存储所有记录造成的海量存储问题,同时也是处理缓慢变化数据(SCD2)的一种常见方式。
42.报表的相关知识
展现报表:所谓展现报表就是将数据库里的数据取出来以一定的样式展现出来,不改变数据库里的数据的报表。展现报表根据取数方式的不同,又可分为普通报表和行式报表。普通展现报表一次取出所需的全部数据,可以做分组、求和等运算,因此在设计时尽量控制取出数据的数量,只取出必要的数据,在硬件能够承受的条件下运行,避免发生内存溢出。行式报表是采取sql分页查询的方式,因此,当数据量较大的时候,可以采用行式报表。
行式报表主要用于处理大数量的数据展现,它每次都只从数据库中调取本页的数据,当点击下一页的时候,会重新调取下一页的数据,这样就解决了内存溢出的问题。由于行式报表每次只取出了一部分数据来展现,因而没法做分组,求和,求平均值等运算。
填报报表:填报报表顾名思义就是进行数据的填写和上报,因此它不仅能从数据库取数,还能进行数据的录入和修改。
43.linux相关知识
常见的命令 查看磁盘空间 cpu或者内存使用情况 查看文件前100后100行
cat查看cpu个数 du查看文件磁盘空间 top查看cpu free查看内存
44.表连接
内连接和外连接,外连接分为左外连接,右外连接,全外连接
内连接是显示量表共有的数据
左外连接是显示量表共有的和左表独有的数据,右表用空补齐
右外连接是显示两表共有的数据和右表独有的数据,
左表用空补齐 全外连接是显示量表独有和共有的数据
45.drop、truncate和delete的区别
DROP:属于DDL,不能回滚,不能加WHERE条件,表内容和表结构一起删除
TRUNCATE:属于DDL,不能回滚,不能加WHERE条件,只删除表内容
DELETE:属于DML,可以回滚,可以加WHERE条件,根据WHERE删除部分内容
速度上来说DROP>TRUNCATE>DELETE
46.ddl dml:
DDL数据定义语言:CREATE 创建;ALTER 修改;DROP 删除;TRUNCATE 清空
DML数据操作语言:INSERT INTO 插入;UPDATE SET 更新;DELETE FROM 删除;MERGE INTO
47.大数据:hadoop
1.大 多 准确(数据质量有保证)
2.解决的问题:大量的数据存储和数据计算
48.数据的类型:
1.半结构化数据:数据有一定的结构 但是结构不固定
json xml
2.结构化数据:固定的字段 字段类型一定(数据库里的表)
3.非结构化数据:没有固定的结构(文本文件 视频 音频 图片)
49.大数据行业内分析的基本步骤:
1.明确分析的目的和基本思路
2.收集数据(web页面 手机app(埋点) 业务系统 )
3.数据的处理(java)
4.数据分析处理(SQL hiveSQL hql)
5.数据的应用:数据可视化分析
6.数据分析报告的产出:数据分析人员
50.hadoop:Apache使用java语言编写的开源免费的软件 是一个开发和运行处理大规模数据的平台
hadoop的三大核心:
hdfs:分布式存储数据的框架 可以实现海量数据的存储(磁盘)
yarn:是负责资源调度的平台(cpu 内存)
MapReduce:分布式计算的框架
hadoop的创始人:道格卡廷 Doug cutting 卡大爷
hadoop的特性:扩容能力
成本低:构建成本低 花销少
效率高:存储数据和处理数据的效率
可靠性:数据不容易丢失
51.hadoop生态圈:
hdfs:分布式存储数据的框架 可以实现海量数据的存储(磁盘)
yarn:是负责资源调度的平台(cpu 内存)
MapReduce:分布式计算的框架
hive:基于hadoop分布式存储的数据仓库 提供SQL查询的数据操作
sqoop:hadoop生态圈里的etl工具(RDBMS–>hdfs)
oozie:工作流调度框架
zookeeper:分布式协调服务的组件
cdh:提供了统一的可视化管理界面 可以实现大数据组件的自动部署和配置 并且调优和安装都非常便捷
多用户管理来控制权限,稳定性高
缺点:占用内存 对linux有一定的了解 对hadoop的Apache版本有一定的安装和调优经验
52.hdfs:基本概念
分布式文件系统:跨多台服务器来完成数据存储的工作
能够存储海量的数据(tb pb 。。)并且为用户提供一个统一的资源访问接口 让用户感觉到只是在访问一个简单的文件系统

hdfs适用的场景:
	1.存储非常大的文件 需要高吞吐量 对延迟没有要求
	2.一次性写入多次读取:数据一旦存储之后 不需要对数据进行更高 后期只是查询
hdfs不适用的场景:
	1.低延迟的数据访问
	2.不适合存储大量小文件
	3.需要对数据进行多次修改

53.hive:
基于hadoop的数据仓库工具
主要用于数据的离线分析
本质:就是把SQL转化为mr语言的工具
为什么要用hive
直接使用hadoop开发比较繁琐 用户需要对mr直接进行操作,学习成本高
hive提供了类似于SQL的功能 用户只要编写SQL即可查询出相关的数据 学习成本低 因为大多数程序员都会SQL
54.oozie:是一个开源的工作流调度引擎框架
工作流:业务过程的部分或者整体在计算机应用环境下的自动化
1.业务过程可以被拆解
2.业务流程之间存在依赖关系
3.业务流程是一个周期性的工作
oozie三种工作流:
workflow:最基础的工作流任务,不支持定时,不支持批量处理(一次性执行多个工作流)
coordinator(计划):对workflow进行再包装,让他支持定时周期执行
bundle:对coordinator进行再度包装在能定时执行任务的情况下实现批量处理
oozie的工作流配置:基于一种图形DAG(有向无环图)
55.sqoop:是Apache下的一款用于hadoop生态圈与关系型数据库之间进行数据导入导出的工具

工作机制:将导入导出的命令转化成mr来执行

56.sqoop和其他常见etl工具的区别
kettle nifi sqoop
1.kettle虽然功能完善,但是当处理大量数据的时候瓶颈问题比较突出 不适合大数据项目
2.nifi功能强大,且支持大数据量操作,但是它独立于hadoop集群,需要独立服务器来支撑
上手门槛高 学习难度大 用人成本高
3.sqoop专为关系型数据库和hadoop之间的etl而生,支持海量数据,操作门槛低
57.数据仓库:
特点:
面向主题
数据集成
非易失
时变
数据仓库系统执行流程
1、确定分析所依赖的源数据。
2、通过ETL将源数据采集到数据仓库。
3、数据按照数据仓库提供的主题结构进行存储。
4、根据各部门的业务分析要求创建数据集市(数据仓库的子集)。
5、决策分析、报表等应用系统从数据仓库查询数据、分析数据。
6、用户通过应用系统查询分析结果、报表
58.ETL(Extra, Transfer, Load)包括数据抽取、数据转换、数据装载三个过程。
1、抽取
​ 数据抽取是从各各业务系统、外部系统等源数据处采集源数据。
2、转换
​ 采集过来的源数据如果要存储到数据仓库需要按照一定的数据格式对源数据进行转换,常见的转换方式有数据类型转换、格式转换、缺失值补充、数据综合等。
3、装载
​ 转换后的数据就可以存储到数据仓库中,这个过程要装载。数据装载通常是按一定的频率进行的,比如每天装载当天的订单数据、每星期装载客户信息等。
59.数据仓库:是用于企业整体分析的数据集合,比如分为:销售主题、客户主题、产品主题等。
数据集市:是用于部门分析的数据集合,从范围上来讲它属于数据仓库的子集,比如: 销售部门的数据集市只有销售主题。
数据仓库和数据集市具有什么区别?
1、范围的区别
数据仓库是针对企业整体分析数据的集合。
数据集市是针对部门级别分析的数据集合。
2、数据粒度不同
数据仓库通常包括粒度较细的数据明细。
数据集市则会在数据仓库的基础上进行数据聚合,这些聚合后的数据就会直接用于部门业务分析。
60.维度与指标
指标:衡量事务发展的标准,也叫度量,如价格,销量等;指标可以求和、求平均值等计算
维度:事务的特征,如颜色、区域、时间等,可以根据不同的维度来对指标进行分析对比。比如根据区域维度来分析不同区域的产品销量,根据时间来分析每个月产品的销量,同一个产品销量指标从不同的维度分析会得出不同的结果
总结:维度就是编写SQL过程中用到的分组字段和条件筛选字段
61.维度建模:
维度表和事实表:
维度表:维度是指观察数据的角度,一般是一个名词,比如对于销售金额这个事实,我们可以从销售时间、销售产品、销售店铺、购买顾客等多个维度来观察分析
高基数维度数据:一般是用户资料表、商品资料表类似的资料表。数据量可能是千万级或者上亿级别。
低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表、地理维表等。数据量可能是个位数或者几千条几万条。
事实表:事实表记录了特定事件的数字化信息,一般由数值型数字和指向维度表的外键组成

62.数仓分层:
好处:1.清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解。
2.复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题。
3.便于维护:当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
4.减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少重复开发的工作量。
5.高性能:数据仓库的构建将大大缩短获取信息的时间,数据仓库作为数据的集合,所有的信息都可以从数据仓库直接获取,尤其对于海量数据的关联查询和复杂查询,所以数据仓库分层有利于实现复杂的统计需求,提高数据统计的效率。
简单理解数仓更层次的作用
ODS:存放接入的原始数据
DW:存放重点设计的数据仓库中间层数据
APP:面向业务定制的应用数据
63.hive的分区操作
分区字段的选择
1.选择的字段可以把数据均匀的分成多个区域
2.确定好的分区字段与后续查询需求所使用的字段能够对应上
3.选择分区字段后,尽量避免大量分区数据产生
分区方式:
静态分区:导入数据时需要手动指定分区
应用场景:导入数据时 向一个分区导入(适合单个分区导入数据)
例子:load data inpath ‘user/hive/xxx.txt’ into table partition(分区字段=值)
insert into table partition(分区字段=值)

动态分区:导入数据时,系统可以动态判断目标分区
应用场景:适合一次性导入多个分区数据
例子:insert into partition(分区字段)
注意:select语句的查询结果最后的字段必须是分区字段 并且按顺序列出
64.构建每一层需要用到的表
外部表:external,删除表的时候 数据不会被删除
数据不归我们独自管理 数据除了我们自己使用 其他部门也要用到这个表
内部表:删除表的时候 数据也会同时被删除
数据完全归我们自己管理 采用内部表

企业发展的痛点:
数据量大:hdfs大数据的存储容器
数据分散:sqoop大数据的etl工具
统计分析难度大:hive进行数据分析
项目的大致流程:
1.进行数据预处理 建立数据中心
2.数据分析处理 重中之重 大量的分析SQL
3.数据的展示 BI可视化分析
项目的需求:共计五大模块
1.访问和咨询用户看板
2.意向用户看板
3.报名用户看板
4.有效线索看板
5.学生出勤看板
项目的架构:
1.通过sqoop将数据从不同数据源导入到hdfs里
2.将hdfs数据在hive中映射成表
3.在hive中进行数据清洗分析
4.将分析结构导出到MySQL中
5.通过可视化工具进行报表展示
所用到的技术:hadoop hive+sqoop+oozie+dhfs+BI工具
管理平台:CDH

在线教育行业近几年发展迅猛导致数据量激增,传统关系型数据库无法满足日常分析需求
所以采用大数据技术来解决当前面临的问题
我们的项目是基于CDH实现的 在这里面 我们用到了 hive sqoop oozie hdfs xxBI工具去做实施
实施过程中有五大模块 分别....... 在这里 我主要负责 xxx模块的开发 	

咨询量与访问量的统计操作
1.全量
1.1:数据采集MySQL—>ods层的表
1.2:从ods层采集数据到dwd层
1.3:dwd–>dws层
1.4:dwd层数据导出到MySQL
2.增量
2.1:数据采集MySQL—>ods层的表
2.2:从ods层采集数据到dwd层
2.3:dwd–>dws层
2.4:dwd层数据导出到MySQL
每一步脚本如何编写(处理当前日期前一天的数据)

数据仓库的分层:
ods层:与原表的数据保持一致
dw:需要考虑的是如何把零散的数据 一步一步细化
dwd:明细层 根据分析的主题 把与主题相关的表结合在一起形成一张新表,并且只保留后续分析要用的字段
ods—>dwd
insert into table
select

from a,b

		dwm:中间表 主要是将一些多个维度统计出来形成一张中间表
			 对不同维度的进一步分析
		dws:业务层 对不同维度的指标进行计算

	访问量表设计:
		维度:小时 天 月 季度 年  区域 来源  搜索来源  访问页面 访问量
		需要考虑 如何存储以上相关的数据

研究数据如何存储
行存储的特点: 查询满足条件的一整行(所有列)数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,
行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。
列存储的特点: 因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;
每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。
数据格式:采用orcfile的格式
压缩方式:在ODS数据源层,因为数据量较大,可以采用orcfile+ZLIB的方式,以节省磁盘空间;
而在计算的过程中(DWD、DWM、DWS、APP),为了不影响执行的速度,可以浪费一点磁盘空间,采用orcfile+SNAPPY的方式,提升hive的执行速度。
存储空间足够的情况下,推荐采用SNAPPY压缩。
T+1:T数据产生的时间 1:数据分析的时间 T+1:数据产生之后需要留在下一天进行分析

你可能感兴趣的:(etl工程师,数据仓库)