ETL工程师面试题及答案(实操导向版).docx

ETL工程师面试题及答案(实操导向版).docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

ETL工程师面试题及答案(实操导向版)

一、基础理解题(考察核心概念落地认知)

问:请用实际场景解释ETL的三个环节,以及和ELT的核心区别?

答:ETL是“抽取-转换-加载”,比如电商场景:

和ELT的区别核心在“转换时机”:ELT是先加载(将原始数据直接扔到数据湖,比如HDFS),后在目标端(如Hive)做转换。比如千万级订单数据,ETL会在中间层(如Kettle)先过滤无效数据再加载,适合实时性要求高、数据量中等场景;ELT适合数据量亿级以上(如全量用户日志),避免中间层算力瓶颈,后期按需在数据湖做转换。

抽取:从MySQL订单表(源)按小时拉取新增订单(增量抽取),从Redis用户行为缓存(源)实时同步点击数据;

转换:清洗订单表的“金额为空”数据(填0或标记异常)、关联用户表补充“用户等级”、计算“订单实付金额=商品金额-优惠券”;

加载:将转换后的订单数据写入数据仓库的“订单事实表”(增量append)。

问:数据仓库中“事实表”和“维度表”的ETL策略有什么不同?举个例子说明。

答:核心差异在“更新频率”和“加载方式”:

维度表(如用户维度表、商品维度表):变化慢,常用“全量覆盖+增量更新”。比如商品维度表,每日凌晨全量拉取所有商品(包括新增/修改的),用“商品ID”做主键,存在则更新(如商品价格变动),不存在则插入;

事实表(如订单事实表):增量产生,只用“增量加载”。比如每小时拉取近1小时的新订单,直接append到事实表,不做更新(除非发现数据错误,才会删重后重新加载该时段数据)。

二、实操细节题(考察落地能力)

问:做增量抽取时,常用哪几种方法?各有什么优缺点和适用场景?

答:三种核心方法,实际用得最多的是前两种:

①时间戳法:源表加“创建时间/更新时间”字段,每次抽取时取“上次最大时间戳”到“当前时间”的数据。

优点:简单易实现(不用改源表结构),对源系统影响小;

缺点:若数据更新时没改“更新时间”(如手动改库),会漏数据;

适用:大部分业务表(如订单表、用户注册表)。

②日志法:通过源数据库日志(如MySQL的binlog、Oracle的redolog)捕获增量数据,比如用Canal解析binlog。

优点:实时性高(毫秒级),不侵入源表(不用加字段/触发器),能捕获所有增删改;

缺点:需部署日志解析工具,对日志格式依赖高(如binlog格式要设为row);

适用:实时性要求高的场景(如秒杀订单实时同步)、源表不能修改的情况(如第三方系统表)。

③触发器法:在源表加insert/update/delete触发器,触发时把数据写入“增量临时表”,ETL从临时表抽取。

优点:能精准捕获所有变更;

缺点:会增加源表写入延迟(触发器执行耗性能),源系统故障时可能丢数据;

适用:小表(如配置表)、对实时性要求不高且源系统压力小的场景。

问:数据转换时遇到“异常值”怎么处理?比如订单表中“订单金额=-100”“用户年龄=200”,你会怎么操作?

答:分两步:先“识别异常”,再“按业务规则处理”,不能一概而论:

第一步:先确认异常是否为“脏数据”(非业务允许的特殊值)。比如“订单金额=-100”可能是退款(业务允许,需保留并标记“退款类型”),但“订单金额=-999”可能是系统bug(脏数据);“年龄=200”明显超出人类合理范围(脏数据)。

第二步:处理脏数据:

若能追溯源头(如联系业务方确认):比如“年龄=200”可能是录入时多写了个0,确认后修正为20;

若无法追溯:“订单金额=-999”这类无意义值,用“空值”或“默认值”替换(但要在备注字段标“脏数据修正”);“年龄=200”直接过滤(或单独存到“异常数据表”,后续排查);

关键:所有处理逻辑要记录到“ETL转换日志”,方便后续回溯(比如业务方问为什么某条数据没了,能查日志说明是异常值过滤)。

三、工具应用题(考察工具实操经验)

问:用Kettle做“MySQL订单表增量抽取到Hive”,你会怎么配置步骤?遇到“抽取速度慢”怎么优化?

答:配置步骤(核心5步):

优化抽取速度:

新建“转换”,添加“表输入”组件(连MySQL订单表),写SQL:select*fromorderswherecreate_time${last_extract_time}(${last_extract_time}是上次抽取的最大时间戳,从配置表读取);

添加“数据清洗”组件(如“过

文档评论(0)

151****9429 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档