ETL 面试题
1. 什么是 ETL?
ETL 是 Extract, Transform, Load 的缩写,是一种数据处理流程,用于将数据从源系统中提取出来,进行必要的转换和清洗,然后加载到目标系统中。
2. ETL 的流程是什么?
ETL 的流程包括以下几个步骤:
- 数据提取:从源系统中提取数据。
- 数据转换:对提取的数据进行必要的转换和清洗。
- 数据加载:将转换后的数据加载到目标系统中。
3. ETL 的工具有哪些?
ETL 的工具包括以下几种:
- Informatica
- DataStage
- Kettle
- Talend
4. 数据集市和数据仓库的区别是什么?
数据集市和数据仓库的区别在于数据集市是面向特定业务的数据仓库,而数据仓库是面向整个企业的数据仓库。数据集市的数据通常是经过筛选和清洗的,而数据仓库的数据通常是未经处理的原始数据。
5. 在ETL过程中,维度指什么?
维度是指用于描述数据特征的属性,例如时间、地点、产品、客户等。维度通常用于数据仓库和数据集市中,用于描述数据的不同特征。
6. 请解释下ETL Mapping Sheets(ETL映射表)
ETL Mapping Sheets(ETL映射表)是一种用于描述ETL过程中数据转换和清洗的工具。ETL映射表通常用于描述ETL过程中的数据转换和清洗规则,例如数据类型转换、数据清洗规则等。
2. SQL 编程题
2.1 连接查询
select * from table1 a
left join table2 b on a.id = b.id
2.2 删除重复行,只保留一条记录
delete from 表名
where
重复字段名 in (
SELECT a.重复字段名from(
select 重复字段名
from 表名
group by 重复字段名 having count(1) > 1
) a
)
and
id(只保留id最小的一个) not in (
SELECT b.id from(
select min(id) as id
from 表名
group by 重复字段名 having count(1)>1
) b
)
2.3 将竖表Table_A转换为横表Table_B
方法一:聚合函数[max或sum]配合case语句
select 姓名,
sum (case 课程 when '语文' then 成绩 else 0 end) as 语文,
sum (case 课程 when '数学' then 成绩 else 0 end) as 数学,
sum (case 课程 when '英语' then 成绩 else 0 end) as 英语
from Table_A
group by 姓名
方法二:使用pivot
select * from Table_A pivot (max(成绩)for 课程 in(语文,数学,英语)) 临时表
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现
PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P
3.1 SQL 应用编程题
说明: 除了Fund表的余额(Fbalance)字段和Investment表的投资金额 (laccount) 字段为number,其他均视为字符串。
请回答以下问题:
1.查询所有投资过600571这个产品且单笔投资金额不少于10000的客户的客户号和姓名,且按姓名降序排列
select Cno,Cname from Client,Investment where Pno=600571 and Iaccount>=10000 order by name desc
select Cno,Cname (查询客户号和姓名)
from Client,Investment (这些资料分别来自两个不同表)
where Pno=600571 and Iaccount>=10000 (条件是产品名为600571和投资金额不少于10000)
order by name desc(按照名字降序)
2.给理财产品表Product新增字段产品净值 (Pvalue) ,类型为字符串,长度为32位,不允许为空
alter table Product add Pvalue varchar[32] not null
alter table Product (修改Prodeut表)
add Pvalue (新增Pvalue字段)
varchar[32] (类型为字符串,长度32)
not null (不允许为空)
3.在投资流水表Investment中,新建客户号、经理人工号和产品代码的唯一索引
create unique index S on Investment(Cno,Mno,Pno)
create unique index S (新建索引名)
on Investment(Cno,Mno,Pno) (在Investment表中,三个列名)
4.为表彰业绩优秀的经理人,请查询出投资600571这个产品投资金额在平均值以上的客户的经理人的工号和姓名
select Mno,Mname from Manager,Investment where Pno=600571 and Iaccount>(select avg(Iaccount) from Investment)
select Mno,Mname (查询经理人工号和姓名)
from Manager,Investment (信息来自这两个表)
where Pno=600571 (条件是600571产品还有投资金额大于平均值)
and Iaccount>(select avg(Iaccount) from Investment)
5.现在投资600571这个产品的客户要从自己的资金账户统一追加投资5000元,请操作相关的表
update table Investment set Iaccount=Iaccount+5000 where Pno=600571
update table Investment (修改Investment表)
set Iaccount=Iaccount+5000 (设置Iaccount列的值全部加5000)
where Pno=600571 (条件为600571这个产品)
恒生电子 https://blog.csdn.net/weixin_43935696/article/details/127035274