1104报表
1104报表主要包括:资产负债,表外业务、流动性风险、贷款质量、投向行业和地区、重点客户等。
1104报表分类
普通报表、特色类报表。
反洗钱
大额交易、可疑交易。标签分类:疑似犯罪、疑似毒品、疑似传销。
反洗钱—接口报表
数仓面试题
什么时候用星型模式?什么时候用雪花模型?
星型模型:事实表和维度表直接关联。
雪花模型:只要有任何一个维度表和事实表是间接关联的。
在数仓建设时比较适合使用星型模型构建底层数据Hive表,通过大量的冗余来提升查询效率。
雪花模型比较适合用在数据市集。
什么是维度表?什么是事实表?
事实表就是你要关注的内容。
维度表就是你观察该事务的角度。
如果现在有一千张表从一个库到另外一个库的ODS层,你会怎么做?
利用消息队列做数据订阅发布。
如何把数据从源系统抽到ods层?
通过 kettle 这个ETL工具来实现的,从不同源系统中抽取数据,做数据清洗,把不同类型的数据转换成目标表的数据,然后通过调度工具每天跑数。
抽数频率是什么?有没有做实时抽数?
不同job的抽数频率不一样,有些T+1天抽取,有些是每2小时。
数据表设计三范式?
- 每一列都要拆分到不能再拆分的最小粒度。
- 每个表都要有主键,并且主键列必须和其他列有关联。
- 主键必须和所有列直接关联,而不是间接关联。
说说数仓分层?
- ODS层:原始数据层。存放原始数据。
- DWD层:明细数据层。对ODS层数据进行清洗(去除空值、脏数据、超过极限范围的数据)。
- DWS层:服务数据层。以DWD为基础,进行轻度汇总。
- ADS层:数据应用层。为各种统计报表提供数据。
为什么要对数仓进行分层?
- 把复杂问题简单化。
- 减少重复开发。
- 隔离原始数据。
说说你对数据仓库的理解?
数据仓库经历三个阶段:简单报表阶段、数据集市阶段、数据仓库阶段。
常见的缓慢变化维处理方式有那三种?
- 直接覆盖:不记录历史数据,薪数据覆盖旧数据。
- 新加一行数据(纵向扩展)。
- 新加两个字段(横向扩展)。
结合具体例子说说你是怎么做缓慢变化的?
背景:有100w用户,用户表记录了他们的状态,部分用户状态每天都有更新。
做法:用拉链表,每天把更新用户的数据插入到用户表。这样既保留了历史数据,并且使存储最为节约。
如何控制数据质量?
- 运用校验机制。
- 数据内容的比对,抽样对比。
- 复盘、每月做一次全量。
说一下你们数仓的数据处理流程?
按照数仓分层思想,分为ods贴源层、dw主题层、mid维表层、dm集市层、app应用层。
过程如下:
- 数据通过采集或同步落地基于HDFS存储的ods层。
- 主题抽取确认。
- 构建维表层数据,如时间、地区、产品类别等数据。
- 进行数据集市构建如统计结果、用户画像、TopN热门数据。
- 进行集市数据的输出到app进行BI可视化展示。
表分类?
- 实体表:指业务对象。
- 维度表。
- 事务型事实表:一般指随着业务发生不断产生数据,特点是一旦发生不会再变化。
- 周期型事实表:一般指随着业务发生不断产生变化(更新,新增)的数据。
同步策略有哪些?
- 全量表:存储完整的数据。
- 增量表:存储新增加的数据。
- 新增及变化表:存储新增加的数据和变化的数据。
- 拉链表:对新增及变化表做定期合并。
实体表(用户,商品,商家):每日全量。
维度表(订单状态,审批状态,商品分类):每日全量。
事务型实时表(交易流水,操作日志):数据量大且不变,每日增量表,每日创建一个分区存储。
周期型事实表(订单,请假等):用每日新增和变化表,制作一张拉链表。
一张500W的表同步过来数据变成了800W,分析哪里的问题?
全量:表里原来就有数据,没有清空;增量:限定的时间有问题。
一张特别大的表 ,几千万的表 怎么通过ETL工具同步?
在ETL工具中,插入数据的时候,可以设置批量提交。比如10万条记录提交一次 ,而不是一次性提交 。
如果抽来的数据有重复的怎么解决?
使用 kettle 核心组件中的去除重复记录控件。
kettle抽数一般遇到什么问题,你们是怎么解决的?
Kettle在不同的数据库抽取数据时,有时会出现中文乱码问题。在输出时,对输出的数据库进行编码配置。
有两张很大的表关联,怎么做才能关联性能好?
关联之前先过滤,再关联。
Oracle怎么进行性能优化?
Oracle性能优化三板斧:索引优化,分区表优化,执行计划(HINTS 优化器优化)。
怎么去重?
用 distinct 或 group by。直接去重、分组去重。
什么是拉链表?
拉链表是为了保留历史数据,并且使存储最为节约。不需要保留历史记录的表一般不做拉链表。
拉链表的实现方式有哪几种?
- 每天只留最新的一份,比如我们每天用 kettle 抽取最新的一份全量数据到Hive中。
- 每天保留一份全量的切片数据。
拉链表怎么更新的?
- 每天drop掉前一天的数据,重新抽一份最新的。
- 每天一份全量的切片。这是一种比较稳妥的方案,而且历史数据也在。
表分区有哪几种?
- Range(范围) – 将一个表通过年份划分成三个分区,80年代(1980’s)的数据,90年代(1990’s)的数据以及任何在2000年(包括2000年)后的数据。
-
Hash(哈希) – 对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。例如可以建立一个对表主键进行分区的表。
-
List(预定义列表) – 将定义的列表的值所对应的行数据进行分割。例如:DBA建立了一个横跨三个分区的表,分别根据2004年2005年和2006年值所对应的数据。
-
Composite(复合模式) - 其实是以上模式的组合使用而已。举例:在初始化已经进行了Range范围分区的表上,我们可以对其中一个分区再进行hash哈希分区。
Oracle常用函数有哪些?
聚合函数:SUM()、COUNT()、AVG()、MAX()、MIN()。
日期函数: LAST_DAY()、ADD_MONTH()。
字符函数: INSTR、SUBSTR、REPLACE、TRIM。
分析函数: OVER (PARTITION BY … ORDER BY…)。