ETL工作经验分享(1)

前言

刚刚结束一段时长一年的工作,去年七月份入职一个世界五百强公司,为客户提供互联网技术服务。单从企业的资历来说,历史悠久,分公司林立,但是不同位置的分公司各分其职。我的公司算是其中提供基础技术支持的分公司,从详细设计做到结合测试,偶尔会涉及本番测试。从技术上讲就是传统认识当中的外包公司,但是公司本身规模较大,技术方向也非常多,同样也面对很多问题,比如没有核心产品,没有TOP-V设计,对NEW-IT的转型缓慢。我相信这些问题如果在公司上层的决策中会有一个相对完美的解决方案。

从职工的角度来讲,外企带来的是稳定的工作机会,相对平等的薪资待遇,没有严重剥削劳动力的现象,没有996高强度的消耗,需要的就是外语能力绝对的过关。

公司文化非常open和多元,能容纳不同的思维和个性的人,注重个人品质,正直,诚实,相互尊重。

我在这样的公司中的一个项目组中担任ETL相关的工作,这接近一年时间的工作,有一些技术上和工作中的经验和感受想记录一下,分享一下。

 

ETL浅谈

之前写过一篇文章介绍过一些唾手可得的ETL介绍,大家可以先简单了解一下。

实际上ETL技术是一项很好入门的技术,相对来说门槛并不高,要求你对SQL熟练掌握,数据库清晰的了解。具体的工作要求可以参看各大公司的招聘要求,基本就是ETL开发过程中需要的基本技能。

上面的是华为招聘的BI工程师岗位,面向的是拥有五年以上经验的BI工程师。至于刚进入工作岗位的小白来说,技能要求相对会降低。

 

基础的数据库能力是必不可少的,SQL结构化查询语言是必会不可的基础中的基础。关于常用的ETL软件与工具,在进入工作岗位中,会在日常实践中快速学会,普遍来讲3到4个月,刚毕业的毕业生就可以着手ETL的开发。

 

ETL工程师是典型的“越老越值钱”,真正能设计出好的ETL工作流的工程师,对整个业务数据有非常好的了解,能够综合考虑当前的数据和最终终端呈现出报表的结果,做出一个最良好的设计。这一点是非常难以做到的,需要长期的项目经验积累。

这一点zhihu有位答友写的很好。

ETL绝对是越老越牛逼的一个领域,但是你要做到四点:

1、至少有比较强的业务学习能力,对所在的领域及其数据有所了解。这是这个领域重要的护城河。

2、熟悉ETL的方法论,这个方法论基本我没有找到过很好的书,但是ETL大师曾经的几次交流,已经足以应付很多项目,如果还有自己更多的总结,那么绝对也能成为大师。这是另一个重要的护城河。

3、ETL是可以创造“人月神话”的,也就是只要你的技术逻辑思维好,了解了ETL本质的精髓,一个毕业生团队半年就可以成为很强的战斗力。他们能否超越你,取决于前两点,但是如果你规则定好,他们大部分人永远都知其然不知其所以然。

4、用ETL的思维可以创造神奇,让他们程序员们要干上1个月才能解决的问题,在你这里1天就可以有结果。同时还能彻底改变你对数据处理这个领域的观点。



作者:決題達零(瑞理)
链接:https://www.zhihu.com/question/316809572/answer/629615456
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

从我个人经历来看,短时间的ETL工作只能是非常浅层的理解,最多算作一个熟练工,BI架构师之路异常的漫长。如果能够对设计模式有深入的了解,将是进一步提升的基础,但是近些年面临的问题是,大型且完整的ETL项目变得逐渐减少,未来可能走向精细化,小型化的道路。

当大部分公司完成了ETL的基础建设,将是漫长的维护过程。想做好ETL必须对数据有很好的sense,同时精通各种数据清洗方法,数据流的分析,同样也离不开对实际问题的建模,不然ETL将无疑于数据库,单纯变成了一个取数据的系统。

我认为实际工作中需要特别注意的有几点内容:

  1. 明确数据从哪里来,经过几层,要流到哪里去,最终要呈现一个什么样的图表和数据表现。
  2. 明确日常使用的工具的基本特性和使用方法。
  3. 什么是事实表,什么是维度表,什么是attribute什么是metric。
  4. 如何设计工作流,理解数据表如何结合,如何取到想要的数据。

ETL是个很传统的技术了,相对已经非常成熟,需要长时间积累才能提升到较高的水平。

笔者仅仅一年的经验而已,经验未免有失偏颇,希望读者可以辩证看待,多多交流。

### ETL工作流的设计、实现与调试 #### 设计原则 ETL(Extract, Transform, Load)过程涉及从不同源提取数据,对其进行转换并最终加载到目标存储中。为了确保这一流程的有效性和效率,在设计阶段应考虑以下几个方面: - **模块化架构**:将整个ETL作业划分为若干个小而独立的任务单元,以便于管理维护以及故障排查[^1]。 - **可扩展性规划**:考虑到未来可能增加的新需求或更大规模的数据量,预先做好容量预估和技术选型。 - **质量保障机制**:建立严格的数据验证规则来防止脏数据进入下游系统;同时设置监控报警功能及时发现异常情况。 #### 实现方式 对于具体的实施手段而言,存在多种成熟的解决方案可供选择: - **Airflow/Luigi**:这两款基于Python开发的工作流编排框架非常适合用来定义复杂的依赖关系链路,并支持定时调度执行周期性的批处理任务。通过编写DAG文件描述各个节点之间的先后顺序及其参数配置,可以轻松搭建起一套自动化程度较高的ETL流水线[^2]。 - **Pentaho Data Integration (Kettle)**:作为一款专注于数据集成领域的开源软件产品,提供了图形化的界面让用户能够直观地绘制出所需的操作步骤序列图。其内置丰富的插件库覆盖了常见的数据库连接器、脚本引擎等功能组件,极大地方便了开发者快速上手使用[^3]。 #### 调试技巧 当遇到运行失败的情况时,可以从以下几个角度出发来进行问题定位分析: - 查看日志输出信息寻找报错提示; - 利用断点调试工具逐行跟踪程序逻辑走向; - 对比测试环境下的预期结果同实际产出是否存在差异。 #### 工具推荐 针对不同的业务场景和个人偏好,市面上有许多优秀的辅助利器值得尝试: - 如果侧重于可视化编辑体验的话,则不妨试试Talend Studio或是Informatica PowerCenter这类商业级平台; - 若追求灵活性和定制能力,则建议采用Apache NiFi配合自研Shell/PySpark代码片段组合而成的混合方案; - 面向云端部署的需求方,Google Cloud Data Fusion、AWS Glue等服务也都是不错的选择之一。 #### 最佳实践总结 最后归纳几点通用的经验法则如下所示: - 始终保持良好的文档习惯,清晰记录下每一步骤的目的意义及相关注意事项; - 定期备份重要资产以防意外丢失造成不可挽回损失; - 积极参与社区交流分享心得感悟共同进步成长。 ```python from airflow import DAG from datetime import datetime, timedelta from airflow.operators.python_operator import PythonOperator def extract_data(): pass # 抽取操作的具体实现 def transform_data(**context): ti = context['ti'] extracted_value = ti.xcom_pull(task_ids='extract') transformed_value = f"{extracted_value}_transformed" return transformed_value default_args = { 'owner': 'airflow', 'depends_on_past': False, 'start_date': datetime(2023, 9, 7), 'email_on_failure': False, 'email_on_retry': False, 'retries': 1, 'retry_delay': timedelta(minutes=5), } with DAG('etl_example', default_args=default_args, schedule_interval=None) as dag: t1 = PythonOperator( task_id='extract', python_callable=extract_data) t2 = PythonOperator( task_id='transform', provide_context=True, python_callable=transform_data) t1 >> t2 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值