作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
亚历山大·W和erer的头像

亚历山大流浪者

Alex和re是一名数据库和数据迁移专家,也是一名拥有20多年专业经验的团队领导者.

专业知识

以前在

沃尔沃
分享

阻碍公司向业务用户提供重要决策信息的最严重错误之一是缺乏来自一个或多个数据源的可靠数据, 聚集在一个地方, 有组织的,准备使用的.

想象一下这个场景——您是一家手机外壳公司的IT经理,该公司在美国各地都有零售店. 你的董事会很难根据销售情况做出决定,因为信息是可用的,但它们位于不同的位置和格式. 其中一位董事要求您生成一个仪表板,其中包含所有销售点的销售信息,以便在下次董事会会议上展示.

您已经知道,由于格式和结构的不同,几乎不可能合并信息. 一些零售终端仍在使用Oracle数据库中的专有系统. 较大的商店正在使用新的Salesforce系统. 在系统过渡期间开始运营的最新售货亭共享了用于计算销售额的电子表格.

如何将来自不同位置、格式和结构的所有数据整理成唯一的数据 数据库 准备好访问仪表板生成?

ETL基本面

ETL代表 提取、转换负载. ETL是一组过程,旨在将这种复杂的数据存储转换为有组织的数据存储, 可靠的, 和可复制的流程,以帮助您的公司产生更多的销售与您已经拥有的数据.

在我们的例子中, 我们将从Oracle数据库接收数据(大多数kiosks), 来自Salesforce(商店), 从电子表格(较新的售货亭), 提取数据, 必要时进行转换, 并装入单个 数据仓库数据库 由报告工具访问,并用于生成仪表板和记分卡.

让我们深入了解ETL的三个步骤来详细说明这个过程.

提取

提取是从单个或多个源接收数据的过程. 源可以有不同的格式和结构, 比如文件, 电子表格, CSV文件, 平面文件, 关系数据库,如Oracle, MySQL, SQL Server, 非关系型数据库, 等等......。.

提取主要有两种类型: 完整的部分.

  • 完整的提取 用于初始提取,还是当数据量和提取时间是可接受的时候.
  • 部分提取 当不需要重新提取所有数据时,建议使用, 或者数据量大到不可能完全提取. 在部分提取中,只提取更新的或新的数据.

除了这些方面, 在选择完全提取还是部分提取时,需要考虑一些其他因素, 我想描述其中一个: 数据可用性和完整性.

这意味着只有完成的事务才会被考虑提取, 消除可能导致完整性错误的数据. 例如,一个在线测试用10个问题来确定工程师的知识. 如果一个工程师正在测试中,并且已经回答了一些问题,但是还没有完成, 提取过程无法从未完成的测试中读取问题. 它可能导致完整性错误.

转换

在提取数据之后, 我们可以开始转变过程:清洁, 操作, 并根据业务规则和技术标准转换数据,以保持可接受的数据质量水平.

根据许多因素,可能需要使用暂存区. 暂存区是一种中间存储空间,用于临时存储从要转换的数据源提取的数据.

在一些项目中, 通常只有少量的数据, 没有必要使用集结区, 但大多数项目都使用它.

在转换阶段执行了一系列任务:

  • 选择: 选择提取数据的标准. 选择可以在提取阶段进行, 在转换阶段, 或者在两个阶段.
  • 集成: 从提取阶段到暂存区域的数据组合. 这个组合意味着添加, 删除, 并根据提取的数据更新暂存区域中的数据.
  • 连接: 用于连接提取的数据,类似于SQL连接(内连接、左连接、右连接、全连接等).)
  • 清洁或擦洗: 删除不一致或无效的数据,或有错误的数据,以提高数据质量. 使用多个数据源会增加出现需要清除的数据问题的可能性, 如:
    • 参照完整性(不存在类别的客户)
    • 缺少值(没有ID的客户)
    • 唯一性(多个拥有相同SSN的人)
    • 拼写错误(Sun Diego, canada, L.洛杉矶)
    • 矛盾的价值观(亚历克斯·多布.27.1974年,Alex dob 04.14.2000)
    • 还有很多其他的
  • 汇总时: 总结数据集供后验使用
  • 聚合: 数据分组汇编和汇总
  • 合并: 来自多个来源或结构的数据合并为一组数据

下面是一些常见的转换类型:

  • 删除重复数据
  • 拆分和合并
  • 转换(日期、时间、数字掩码、度量)
  • 编码(男至M)
  • 计算(item_value = unit_Price * quantity)
  • 密钥生成

加载

最后但并非最不重要的是,ETL中的最后一个过程是将数据加载到目标中. 加载是将转换后的数据(来自暂存区或非暂存区)插入存储库的行为, 通常是数据仓库数据库.

加载数据有三种主要类型:完整或初始、增量和刷新.

  • 全名或首字母 表示提取和转换数据的完整负载. 暂存区域中的所有数据都将加载到最终目的地,以便为业务用户做好准备.
  • 增量加载 是将转换后的数据与最终目的地中的数据进行比较并仅加载新数据的过程吗. 增量加载可以与刷新加载结合使用,下面将进行说明.
  • 刷新加载 在最终目标中更新数据的过程是否反映了在原始源中所做的更改. 刷新可以是完全刷新,也可以是增量刷新.

总之, 每个公司, 与它的大小无关, 是否可以使用ETL流程来集成已经存在的信息,并为决策生成更丰富的信息, 将以前不能使用的数据转化为新的收入来源.

测试

测试是ETL最重要的阶段之一,但也是最容易被忽视的阶段之一.

转换来自不同来源和结构的数据并将其加载到数据仓库是非常复杂的,并且可能会产生错误. 在上面的转换阶段中描述了最常见的错误.

数据的准确性是成功的关键,而不准确性则会导致灾难. 因此, ETL的专业人士 在整个过程中有保证数据完整性的使命. 在每个阶段之后,必须执行一个测试. 是从单个源提取数据还是从多个源提取数据, 必须检查数据以确定没有错误.

在任何转换之后都必须进行相同的操作. 例如, 在转换阶段汇总数据时, 必须对数据进行检查,以确保没有数据丢失,并且总和是正确的.

将转换后的数据加载到数据仓库之后, 必须重新应用测试过程. 加载的数据需要与转换后的数据进行比较,然后与提取的数据进行比较.

在我们的手机外壳公司的例子中, 我们正在使用三个不同的数据源(专有的Oracle数据库), Salesforce, 和电子表格)和不同的格式. 测试阶段可以使用来自原始数据源的样本数据,并将它们与暂存区域中的数据进行比较,以确保提取过程没有错误.

示例数据——在本例中可以是来自三个不同位置(商店)的销售信息, 老亭, 新的信息亭)——将与原始来源进行比较. 如果存在差异,则必须对其进行分析,以确定它们是可接受的还是错误的.

如果发现错误, 它们必须被修复, 如果你需要解决这些问题,你需要做出一些决定: 原始数据是否需要修改? 这可能吗? 如果错误不能在原始源中修复,那么可以通过一些转换来修复它们吗?

在某些情况下, 必须消除有错误的数据,并触发警报以通知负责人.

一些测试示例:

  • 数据需要验证
  • 数据质量
  • 表演。
  • 数据规则
  • 数据建模

日志记录

记录ETL进程是确保您拥有可维护且易于修复的系统的关键保证.

具有正确日志记录流程的ETL对于保持整个ETL操作处于不断改进的状态非常重要, 帮助团队管理数据源的bug和问题, 数据格式, 转换, 目的地, 等.

一个健壮的日志流程可以帮助团队节省时间,使他们能够更快速、更容易地识别问题, 首席工程师需要更少的时间直接找出问题所在. 有时, 错误发生在提取大量数据的过程中, 没有圆木, 找出问题是困难的——有时几乎是不可能的. 如果没有日志,则必须重新运行整个进程. 使用日志, 团队可以快速识别导致问题的文件和行,并且只能修复这些数据.

我能想到的唯一一种日志不那么重要的情况是非常小的非自动化系统, 流程是手动运行的,只有少量数据可以手工监控.

日志提高自动化. 具有大量自动运行数据的ETL进程需要日志系统. 如果计划和执行得当的话, 构建日志记录系统的所有努力都将以更快的错误识别形式获得回报, 更可靠的数据, 以及在日志文件中发现的改进点.

创建日志系统有三个主要步骤: 生成、存档分析.

  • 生成 记录ETL管道执行过程中发生的事情的过程:过程何时开始, 正在提取哪个文件或表, 保存在暂存区域中的数据, 错误消息, 和更多的. 所有能帮助工程师的重要信息都必须记录下来. 警报注意不要产生太多的信息,那只会浪费时间和空间,而且没有帮助.
  • 存档 日志数据意味着保持过去执行的跟踪记录,以搜索过去的场景,从而识别错误或与当前场景进行比较,以寻找改进. 检查历史上某个特定点与保存很久以前的数据的相关性是很重要的, 结构改变了很多次的地方, 不值得保留.
  • 分析. 日志分析是至关重要的. 存储大量未经分析的数据是没有意义的. 它只是需要时间和金钱来生成和存储数据. 日志分析的重要性不仅在于帮助查找错误,还在于确定改进点并提高总体数据质量.

表演。

ETL流程可以处理大量数据,并且可能会花费很多时间来设置它们,以及处理数据所需的计算资源. 规划集成时, 工程师们必须牢记所有数据被使用的必要性. 最好的做法是使用最少的数据量来实现目标, 而不是花费时间和金钱迁移无用的数据. 也, 请记住,数据量往往会随着时间的推移而增加, 所以尽量考虑你未来的需求.

设计一个日志记录系统需要付出多少努力?

这取决于许多不同的因素,比如要处理的数据的数量和频率. 数据少的小系统可以手工管理, 无需投资于先进的测井系统.

拥有大量数据的公司, 许多不同的过程, 不同的数据源和格式, 复杂的管道必须投资建立记录系统. 正如我们已经提到的,一个好的日志系统可以节省大量的时间和金钱.

一个更明显的方法, 无论公司规模大小, 数据量, 和积分频率, 一个ETL进程必须是 盈利. 对时间的投资, 钱, 技术资源必须产生回报——正如经济学家米尔顿·弗里德曼所说:“天下没有免费的午餐。.”

总之, ETL流程可以帮助企业利用已有的数据增加利润,但这些数据没有得到正确的使用. ETL管道可以集成不同的系统, 那些包含重要信息的电子表格, 以及分布在不同部门和分支机构的数据的其他部分, 允许组织充分利用他们的数据.

了解基本知识

  • ETL代表什么?

    ETL代表提取、转换和加载.

  • ETL流程是如何工作的?

    ETL不是一个单一的进程, 而是一组过程,旨在将复杂的数据存储转化为有组织的, 可靠的, 和可复制的过程,以帮助您有效地使用更多的数据,您已经拥有.

  • 为什么ETL在数据仓库中很重要?

    因为ETL整合了来自不同来源的数据, 然后将其转换为数据仓库中使用的格式, 提高数据的质量和一致性.

  • ETL如何帮助在数据仓库内外传输数据?

    通过确保数据被整合并转换为通用格式, 不管原始的来源和格式.

就这一主题咨询作者或专家.
预约电话
亚历山大·W和erer的头像
亚历山大流浪者

位于 圣地亚哥,加州,美国

成员自 2020年6月18日

作者简介

Alex和re是一名数据库和数据迁移专家,也是一名拥有20多年专业经验的团队领导者.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

专业知识

以前在

沃尔沃

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

Toptal开发者

加入总冠军® 社区.