数据分析的历史发展包含许多重要的里程碑和技术,它们共同塑造了当今的数据分析领域。它始于 20 世纪 80 年代数据仓库的出现,数据仓库为组织和分析业务数据奠定了基础框架。计算机科学家 Bill Inmon 在 80 年代和 90 年代持续发表著作,被广泛认为是为数据仓库提供了第一个坚实的理论基础。另一个数据仓库和商业智能 (BI) 领域的杰出贡献者 Ralph Kimball 在 1996 年出版了影响深远的著作《The Data Warehouse Toolkit》,这标志着数据分析发展中的另一个重要里程碑。Kimball 的工作奠定了维度建模的基础,这是数据分析演变过程中的另一个关键时刻。总而言之,Inmon 和 Kimball 在 20 世纪后期的贡献共同塑造了数据仓库和数据分析的格局。
21 世纪初,像谷歌和亚马逊这样的科技巨头的崛起带来了处理海量数据的新需求,这催生了 Google File System 和 Apache Hadoop 的发布。这标志着大数据工程时代的到来,专业人士使用 Hadoop 框架来处理大量数据。像亚马逊网络服务 (AWS) 这样的公共云提供商的兴起彻底改变了软件和数据应用程序的开发和部署方式。AWS 的开创性产品之一是 2012 年推出的 Amazon Redshift。它融合了联机分析处理 (OLAP) 和传统数据库技术,在早期版本中,Redshift 需要数据库管理员手动执行诸如清理和扩展等任务来维持最佳性能。
随着时间的推移,云原生技术不断发展,Redshift 自身也得到了显著的增强。新版本的 Redshift 以及像 Google BigQuery 和 Snowflake 这样的云原生平台在保留 Redshift 核心优势的同时,简化了许多管理任务,为各种规模的企业提供了先进的数据处理能力。这种演变突显了云数据处理生态系统正在进行的创新。
由 Apache Airflow、数据构建工具 (dbt) 和 Looker 等工具组成的现代数据栈进一步改变了数据工作流。随着这些进步,“大数据工程师”这一术语逐渐过时,取而代之的是数据工程师更广阔、更包容的角色。这种转变在影响深远的文章中得到认可,例如 Maxime Beauchemin(Apache Superset 和 Airflow 的创建者,以及 Facebook 和 Airbnb 的早期数据工程师之一)的文章《数据工程师的崛起》,文中强调了数据工程在行业中的重要性日益增加。
数据领域的这些快速发展带来了数据专业人员角色的重大转变。随着数据工具的出现,简单任务正变得更加战略化。如今的数据工程师拥有多方面的角色,涵盖数据建模、质量保证、安全性、数据管理、架构设计和编排。他们越来越多地采用软件工程实践和概念,例如函数式数据工程和声明式编程,来改善工作流程。
虽然 Python 和结构化查询语言 (SQL) 是数据工程师必不可少的语言,但需要注意的是,该领域编程语言的选择可能会有很大差异。工程师可能会根据项目的特定需求和偏好,利用其他语言,例如 Java(常用于管理 Apache Spark 和 Beam)、Scala(也普遍存在于 Spark 和 Beam 生态系统中)、Go 等。大型组织的数据工程师还经常使用 Java 和 SQL 等语言的组合。
组织越来越多地转向去中心化数据团队、自助服务平台和替代数据存储选项。随着数据工程师被迫适应所有这些市场变化,我们经常会看到一些人承担更具技术性的角色,专注于平台使能。其他数据工程师则更接近业务,设计、实施和维护将原始数据转化为高价值信息的系统,以适应这个快速发展的行业,该行业每天都在推出新工具,并催生了数据分析工程的精彩世界。
本章将介绍数据分析工程领域及其在数据驱动决策过程中的作用。我们将讨论数据分析工程在当今数据驱动世界中的重要性以及数据分析工程师的主要职责。此外,我们将探讨数据分析工程生命周期如何用于管理分析过程,以及它如何确保生成数据的质量和准确性。我们还将从历史到现在,探讨塑造数据分析工程领域的当前趋势和技术,触及数据网格等新兴概念,并讨论提取、加载和转换 (ELT) 与提取、转换和加载 (ETL) 策略以及世界各地采用的许多数据建模技术之间的根本选择。
数据库及其对数据分析工程的影响
当今时代,数据日益成为企业关注的焦点。为了保持竞争优势、改善内部流程或仅仅是为了理解客户行为,企业越来越重视数据。然而,随着新工具、新工作方式以及数据科学和商业智能 (BI) 等新知识领域的出现,全面了解和理解当今的数据格局变得愈发困难。
科技的自然发展催生了大量的数据分析、可视化和存储工具,每种工具都提供着独特的功能。然而,快速部署这些工具也导致了数据领域的碎片化,个人和组织既需要紧跟最新技术发展,又需要谨慎选择如何使用这些技术。有时,这种丰富会导致困惑,需要持续的学习和适应循环。
工作方式的演变伴随着工具的多样化。敏捷的方法取代了传统的数据管理和分析方法。迭代式实践和跨职能协作为数据项目带来了灵活性 and 速度,但也对不同团队和角色之间的工作流协调提出了挑战。随着数据处理过程的各个方面融合在一起,有效的沟通和协调变得至关重要,这也需要对这些新颖的工作方式有全面的理解。
数据科学和 BI 等专业领域也增加了数据领域的复杂性。数据科学家应用先进的统计和机器学习技术来检测复杂模式,而 BI 专家则从原始数据中提取有价值的信息以产生实用的洞察力。这些专业领域引入了精细的技术,需要定期培养技能和学习。成功采用这些实践需要对教育的坚定承诺和灵活的技能获取方式。
随着数据在数字领域蔓延,它带来了无法预料的数量、种类和速度。大量的数据,再加上当今数据源的复杂特性,例如物联网 (IoT) 设备和非组织文本,使数据管理变得更加困难。整合、转换和评估数据精度的细节变得更加明显,强调了需要强大的方法来保证可靠和精确的洞察力。
数据领域的复杂性源于其多方面的本质。由于需要融合来自计算机科学、统计学和领域专业知识等不同领域的技能,因此协作和沟通的策略必不可少。这种跨学科的互动凸显了高效团队合作和知识共享的重要性。然而,情况并非总是如此。
几十年来,电子表格一直是各个层级数据存储、管理和分析的标准技术,既用于业务运营管理,也用于分析理解数据。然而,随着企业变得更加复杂,对数据驱动决策的需求也随之增加。而第一个出现的变革形式就是数据库。
数据库可以定义为结构化信息的集合,通常以电子方式存储在计算机系统中。这些数据可以是文本、数字、图像或其他类型的数字信息。数据的存储方式便于使用预定义的规则和结构(称为架构)进行访问和检索。数据库是分析必不可少的组成部分,因为它们提供了一种高效存储、组织和检索大量数据的方法,使分析师能够轻松访问他们执行复杂分析所需的数据,以获取原本难以或无法获得的洞察力。此外,数据库可以配置为确保数据完整性,从而保证所分析的数据准确一致,使分析更加可靠可信。
将数据库用于分析的最常见方法之一是数据仓库技术,即构建和使用数据仓库。数据仓库是一个大型的集中式数据存储,旨在简化数据的使用。数据仓库中的数据通常来自各种来源,例如事务系统、外部数据源和其他数据库。然后,这些数据会经过清洗、转换和集成,成为一个单一的、一致的数据模型,通常遵循维度建模技术,例如星型模式或数据金库 (Data Vault)。
数据库在分析中的另一个重要用途是数据挖掘过程。数据挖掘利用统计和机器学习技术来揭示大型数据集中的模式和关系。通过这种方式,可以识别趋势、预测未来行为并做出其他类型的预测。
因此,数据库技术和数据科学家通过提供一种高效存储、组织和检索大量数据的方法,使数据科学家能够处理大型数据集并专注于重要事项:从数据中获取知识,从而在数据科学的兴起中发挥了关键作用。使用 SQL 和其他编程语言(例如 Python 或 Scala)可以与数据库交互,使数据科学家能够执行复杂的数据库查询和操作。此外,诸如 Tableau 和 Microsoft Power BI 等数据可视化工具的使用(它们可以轻松与数据库引擎集成),使数据科学家能够以清晰直观的方式展示他们的发现。
随着大数据时代的到来以及存储和处理海量数据集需求的增长,出现了各种数据库技术来满足不同的需求。例如,数据分析师经常依赖数据库进行广泛的应用,包括数据仓库、数据挖掘以及与 Tableau 等 BI 工具的集成。但是,为了理解分析工程的需求,我们还需要更深入地研究这些用例。
当将 BI 工具直接连接到操作数据库(联机事务处理 [OLTP] 副本)时,性能和可扩展性可能会受到限制。这种方法对于较小的数据集和简单查询可能效果良好,但随着数据量增长和分析复杂性的增加,它可能会导致性能瓶颈和查询响应时间低于预期。这就是分析工程发挥作用的地方。
分析工程师是优化数据工作流的专家,他们会转换和聚合数据,以确保其处于适合分析任务的格式。他们设计和维护数据管道,将来自各种来源的 ETL 数据集成到优化的数据仓库或数据湖中。通过这样做,他们可以帮助企业克服直接 OLTP 连接的限制,使使用 Tableau 等工具进行数据分析更加快速高效。
从本质上讲,分析工程弥合了原始数据和可操作洞察力之间的差距,确保数据分析师和科学家能够有效地处理大型复杂数据集。
云计算及其对数据分析工程的影响
近几十年来,世界面临着一系列复杂的挑战,这些挑战对技术有着重大影响。经济衰退推动了金融科技和风险管理系统的创新。地缘政治紧张局势要求网络安全技术进步,以保护关键基础设施和敏感数据。全球卫生危机凸显了先进数据分析和预测建模在疾病监测和管理方面的重要性。此外,迫切需要应对气候变化,这推动了尖端可再生能源技术和可持续工程解决方案的开发,以实现气候目标。
在这些挑战中,追求利润和增长仍然是全球企业发展的主要动力。然而,人力劳动时间的价值正变得越来越重要,这导致了企业运营方式和云计算适应方式的重大变化。这种变化体现在越来越多的企业采用托管服务和无服务器产品,从而减少了对全职支持人员(例如数据库管理员)的依赖。
随着企业适应不断变化的形势,创新、差异化和商业模式与战略的可持续性成为企业在快速变化的世界中取得成功的关键因素。信息技术和系统行业认识到,帮助组织克服当今充满不确定性和压力的环境是一个良好的发展机会。运营模式的合理化变得尤为重要,需要重新评估数据中心和定价结构。此外,产品和服务必须主要关注易用性、更低的延迟、更强的安全性、更广泛的实时工具、更多的集成、更智能的功能、更少的代码以及更快的上市时间。
组织认识到投资创新工具、推动数字化转型以及采用以数据为中心的方法进行决策的重要性,以实现更大的敏捷性和竞争优势。为了实现这些目标,许多组织正专注于利用来自内部和外部来源的精心策划的数据。精心构建的数据可以提供宝贵的业务绩效洞察力。业内通常将创建、可视化和分析相互关联的业务数据并使其易于访问的做法称为数据分析。过去它也称为商业智能 (BI),这两个术语密切相关。BI 是数据分析的一个子集,侧重于面向业务的决策制定,而数据分析涵盖更广泛的领域,包括产品分析、运营分析和其他一些专业领域。BI 和数据分析都扮演着帮助组织通过数据驱动洞察力获得竞争优势的关键角色。
尽管数据分析在改进和重塑商业战略以及监控绩效方面提供了诸多好处,但它需要大量资金投入服务器、软件许可证以及专业人员,例如数据工程师、数据科学家和数据可视化专家。在经济危机时期,高昂的 IT 硬件、软件和专业人员的前期投入和运营成本可能被认为不切实际且没有吸引力。因此,本地部署解决方案(数据分析基础设施在公司自己的场所设置和管理)往往失去吸引力。对于初次接触数据分析且对该概念不熟悉的新手来说尤其如此。本地部署解决方案通常需要大量投资于硬件、软件和持续维护。与基于云的数据分析解决方案相比,它们的可扩展性和灵活性也较低。
这种偏好的转变为新型的基于云的数据分析解决方案让路,这些解决方案可以满足与传统数据分析类似的业务需求。然而,基于云的解决方案并非依赖本地服务器和软件,而是利用云计算服务来加速部署并最大限度地降低基础设施成本。云计算在各个行业的普及促使微软、谷歌和亚马逊等软件供应商开发用于数据分析和数据仓库的高级工具。这些工具旨在在云计算范式中运行,并利用共享网络资源来实现更高的可访问性和简化的部署。微软的综合数据分析平台 Microsoft Fabric 就是这一趋势的一个生动例子。与之平行的是 dbt Labs 的 dbt(我们将在本书后面更详细地讨论),它作为一个多功能的混合产品脱颖而出。dbt 与 Hadoop 一样,都是开源解决方案,使用户可以根据其特定需求(无论是在云端还是本地)灵活地部署它。在其云版本中,dbt 可以与领先的云平台无缝集成,包括 Microsoft Azure、Google Cloud Platform (GCP) 和 AWS。这种开源特性使组织能够根据其独特需求和基础设施偏好自定义部署。
虽然基于云的数据分析解决方案和平台是全球趋势,也是现代数据平台的核心概念,但重要的是要认识到云计算解决方案既有好处也有风险,不容忽视。这些风险包括潜在的安全问题、服务器的物理位置以及离开特定供应商的成本。尽管如此,云技术正在改变组织部署和构建信息系统和技术解决方案的方式,数据分析也不例外。这就是为什么认识到迁移到云计算很快将不再是一种选择而是一种必然的原因。了解服务形式的分析解决方案的好处非常重要。否则,如果不解决这种转变问题,使用缺乏灵活性和可扩展性的本地解决方案向决策者提供及时信息将变得越来越具有挑战性。
然而,云技术虽然带来了一些好处,例如规模经济和灵活性,但也存在信息安全问题。云基础设施中集中存储的数据使其成为未经授权攻击的诱人目标。为了在云环境中利用数据分析取得成功,组织必须理解并降低云计算带来的风险。关键风险包括数据隐私、控制权丧失、数据删除不完整或不安全、未经授权的内部访问、数据可用性以及复杂的成本核算。
数据隐私是一个重大问题,因为即使供应商提供了公共审计报告来帮助建立信任,也很难核实他们是否按照法律和标准处理数据。在非集成的情况下,随着数据在各个系统和数据中心之间流动,数据安全风险会成倍增加,截取和同步数据的风险也会增加。另一个重要风险是供应商依赖症,即数据管理责任完全由一个服务提供商承担,从而限制了迁移到其他解决方案的能力。这种依赖最终会限制组织对决策和数据支配权的控制。
这些仅仅是一些已知的风险,但我们已经可以理解,组织需要控制这些风险才能有效地享受基于云的数据分析解决方案带来的好处。这需要仔细考虑、遵循安全标准和最佳实践,并进行持续的成本控制来衡量投资回报率。
如果所有风险都在适当的数据战略中得到正确识别和缓解,该战略将概述组织如何管理其信息资产,包括云战略、技术、流程、人员和相关规则,那么与没有数据战略的组织相比,该组织将能够获得巨大的竞争优势。
通过关注云计算并利用云数据平台,组织可以将原始数据转化为有意义的洞察力,从而加快构建坚实数据基础的过程。这能实现高效地获取、组织和分析相关数据,甚至支持采用人工智能技术,同时以低于传统方法的成本和更短的时间创造价值。
有趣的是,云数据平台、数据分析和人工智能之间的关系是共生的。实施云数据平台可以加速采用以分析为导向的架构,并实现人工智能计划的全面运营。它使组织能够利用所有相关数据,获得全企业的洞察力,并解锁新的业务机会。通过消除管理多个工具的需要,组织可以专注于数据现代化、加速洞察发现并受益于现有技术合作伙伴关系,从而推进其人工智能进程。
正因如此,可以说云计算一直是现代数据平台和不断增长的基于云的分析和人工智能平台的核心组件,并因此推动了这个行业的变革。
数据分析生命周期
数据分析生命周期是一系列将原始数据转化为宝贵且易于使用的成果的过程。这些成果可以是管理良好的数据集、仪表盘、报告、API 甚至网络应用程序。换句话说,它描述了数据如何被创建、收集、处理、利用和分析,以实现特定的产品或业务目标。
随着组织架构日益复杂,数据处理方式也随之发生着变化。许多人需要使用相同的数据,但用于不同的目的。高层管理人员可能只需要了解少数关键绩效指标来跟踪业务绩效,而中层管理人员则可能需要一份更细化的报告来支持日常决策。这凸显了基于相同数据基础来创建和维护数据产品的规范化和治理方法的重要性。
鉴于组织在数据治理、技术和管理流程方面需要做出许多决策,遵循一种结构化的方法对于记录和持续更新组织的数据战略至关重要。
因此,数据分析生命周期是理解和规划创建和维护分析解决方案所涉及的阶段和过程的重要框架(图 1-1)。它是数据科学和分析领域的基本概念,为管理创建有效分析解决方案所需的各种任务和活动提供了结构化的方法。
数据分析生命周期通常包含以下阶段:
1. 问题定义
分析周期第一步是理解需要解决的问题。这包括识别业务目标、可用数据以及解决问题所需的资源。
- 业务目标:明确进行数据分析的目的是什么?想要通过数据分析做出哪些决策?
- 可用数据:需要哪些数据来解决问题?数据来自何处?
- 资源:完成数据分析需要哪些人力、物力和财力资源?
2. 数据建模
在识别业务需求并完成数据源评估后,就可以根据最符合需求的建模技术开始构建数据模型。常用的数据建模技术包括星型架构、雪花架构、数据金库 (Data Vault) 甚至是完全非范化的技术。所有这些概念将在第二章进行详细讨论。
- 星型架构:一种简单易懂的仓库架构,常用于数据仓库和数据集市。
- 雪花架构:一种扩展的星型架构,可以进一步细化数据粒度。
- 数据金库:一种面向业务而非技术人员的仓库架构,强调数据的可追溯性。
- 非范化技术:通过冗余数据来提升查询性能的一种数据模型设计方法,需要谨慎使用。
3. 数据摄取与转换
下一个阶段是将来自源系统的数据摄取并准备,使其符合创建的模型。根据总体信息架构,可以选择写入模式 (schema-on-write) 策略,这种策略将更多精力放在直接将原始数据转换为模型上;或者可以选择读取模式 (schema-on-read) 策略,这种策略只需少量转换即可摄取和存储数据,并将繁重的转换移到数据平台的下游层。
4. 数据存储与结构化
设计并可能实现数据管道后,还需要决定要使用的文件格式(简单的 Apache Parquet 或更高级的格式,例如 Delta Lake 或 Apache Iceberg),以及分区策略和存储组件(云对象存储,例如 Amazon Simple Storage Service (S3) 或更类似数据仓库的平台,例如 Redshift、BigQuery 或 Snowflake)。
5. 数据可视化与分析
数据可用后,下一步是探索、可视化数据或创建仪表盘,直接支持决策制定或启用业务流程监控。此阶段非常面向业务,应与业务利益相关者密切协调进行。
6. 数据质量监控、测试和文档
虽然数据质量显示为分析生命周期的最后阶段,但数据质量应该贯穿整个流程并通过设计加以保证。它涉及实施所有质量控制措施,以确保利益相关者可以信任公开的数据模型,记录所有转换和语义含义,并确保随着数据流继续流动而沿管道进行适当的测试。
数据分析生命周期是关键的概念,使组织能够以一种结构化和一致的方式来处理数据工程、数据科学和数据分析过程。通过遵循既定的流程,组织可以确保解决正确的问题、使用正确的数据,并构建准确可靠的数据产品,最终带来更佳的决策制定和更好的业务成果。
分析工程师的新角色
正如前几节所述,数据科学家和分析师现在可以轻松访问他们执行复杂分析所需的数据,并获得否则难以或无法获得的洞察力。然而,随着存储和分析的数据量不断增长,对于组织来说,拥有数据专家来帮助他们管理数据并提供所需的基础设施变得愈发重要。新兴的分析工程师分支扮演着至关重要的角色,他们负责开发和维护数据库和数据管道,使数据科学家和分析师能够专注于更高级的分析任务。分析工程师负责设计、构建和维护数据架构,使组织能够将数据转化为有价值的洞察力并做出数据驱动型决策。
此外,从传统具有严格写入模式的 ETL 流程转向具有读取模式的 ELT 流程,意味着数据在转换之前会先进入数据仓库。这为熟悉业务且具备将原始数据建模成干净、定义良好的数据集的技术技能的超级技术分析师(即分析工程师)提供了机会。如果要在数据仓库和 ETL 范式的世界中寻找这类技能,则需要同时具备软件工程和数据分析技能的专家,这样的人才将更加稀缺。
分析工程师充当数据平台工程师(专注于构建支持数据平台的技术基础设施)和数据分析师(专注于将数据转换为可生成洞察力的数据产品)之间的桥梁。他们的工作是创建经过良好测试、更新及时且经过文档记录的数据集,供组织的其他部分用来回答自己的问题。他们不仅拥有足够的技术知识来应用软件开发最佳实践(例如版本控制和持续集成/持续交付 (CI/CD)),还需要能够与利益相关者进行有效的沟通。
我们可以用土木工程来做类比:数据平台工程师是分析项目的基石,负责确保基础设施稳健,包括管道、电气系统和结构基础。他们为后续的一切奠定基础。分析工程师则类似于建筑师。他们利用数据工程师创建的坚实基础,并设计符合业务模型的结构,构建从卓越仪表盘到宝贵数据模型的一切内容。他们弥合技术基础设施和业务目标之间的差距。
延续先前的类比,数据科学家和分析师就好比室内设计师。他们进入由建筑师设计好的建筑物,不仅确保内容符合用户需求,而且会使其更加用户友好并满足数据使用者特定的需求。这些角色共同协作,创造出一个整体的、实用的分析环境。
套用数据分析生命周期的视角来看,数据平台工程师负责构建平台并将原始数据摄取到企业级数据存储库中。另一方面,分析工程师则处理这些原始数据,并将其转换成为匹配业务决策所需的分析数据模型。
分析工程师的职责
随着数据量、复杂性及其多样化应用的不断增长,分析工程师的角色变得越来越重要。这涵盖了从设计和实施数据存储和检索系统,到创建和维护数据管道,以及开发和部署机器学习模型等方方面面。在如此动态的领域中,分析工程师在利用日益增长的数据资源并在广泛应用中使其价值最大化方面发挥着至关重要的作用。
根据最新的角色趋势,分析工程师的主要职责之一是设计和实施高效的数据存储和检索系统。这包括使用数据库和数据仓库技术来设计能够处理大型复杂数据集的数据模型和结构。另一项重要职责是创建和维护数据管道,这些管道可以从各种源提取数据、转换数据并将其加载到中央存储库中以便进行分析。
对于大多数分析工程师来说,开发和使用机器学习模型虽然不是那么显而易见,但仍然是其职责之一。这包括与数据科学家合作以了解他们的需求,选择和实施合适的算法,并确保模型使用正确 的训练和测试数据集进行训练和部署。如果没有合适的训练和测试数据集,分析工程师会协作构建适当的数据管道,以向数据科学家持续提供所需的数据。此外,分析工程师还负责监控和维护机器学习模型的性能,既要帮助构建离线评估,又要将特定于模型的指标与业务指标结合起来进行在线监控。
分析工程师通常熟练掌握 Python、R、SQL 和 Spark 等编程语言和工具来实现数据管道、数据模型和机器学习模型。他们还应该熟悉 AWS、GCP 或 Azure 等云计算平台,以便部署和扩展他们的解决方案。
随着数据量、复杂性和多样化应用的不断增长,分析工程师的角色变得愈发重要。其职责范围涵盖整个数据生命周期,从存储和提取,到分析和建模,再到机器学习的部署和运维。
核心职责:
- 设计和实施高效的数据存储和检索系统,例如能够处理大规模复杂数据集的数据库和数据仓库。
- 创建和维护数据管道,从各种来源提取、转换并加载数据到中央存储库以供分析。
- 通过执行数据质量检查、跟踪数据流和实施数据安全措施来确保数据的准确性、完整性、一致性和可访问性。
- 利用云计算平台(例如 AWS、GCP 或 Azure)部署和扩展分析解决方案,同时优化数据基础设施的可扩展性、安全性以及成本。
- 优化数据存储和检索系统、数据管道以及机器学习模型的性能,以确保它们能够处理数据量和复杂性。
技术栈:
- 熟练运用编程语言和工具,例如 Python、R、SQL 和 Spark 来构建数据管道、数据模型和机器学习模型。
与数据科学家的合作:
- 与数据科学家合作以了解他们的需求,选择和实施合适的算法,并确保机器学习模型经过适当的训练和部署。
- 监控和维护机器学习模型的性能,并根据需要进行故障排除和优化。
持续学习:
- 不断更新自身知识库,掌握数据工程、机器学习和分析领域的最新技术和趋势,并持续寻找改进组织数据基础设施和分析能力的方法。
综合技能:
- 分析工程师的角色需要技术技能、解决问题能力和理解业务需求的综合能力。
- 熟悉数据科学的技術层面和商业层面,能够在数据科学家和 IT 部门之间起到桥梁作用。
分析工程师的角色既需要扎实的技术功底,又需要对业务的敏锐洞察力,是引领企业挖掘数据价值的关键人才。
数据网格中的分析
数据网格是一种勾勒组织数据战略的现代框架。它使业务领域团队能够掌控自己的数据及其访问服务,而不是仅仅依赖于中央数据团队。数据网格将庞大的数据架构分解成一系列独立、自治的数据服务,实现更精细的扩展、更高的自主权以及更优的数据管理。这种架构方式提供处理各类数据的灵活性,并鼓励探索、创新和协作文化。通过采用数据网格,企业应该能够更加敏捷地应对不断变化的业务需求。
数据网格方法论作为一种架构模式的出现,彻底改变了分析人员与数据基础设施交互的方式。通过将单体数据架构分解成一系列独立、自主的数据服务(这些服务可以独立开发、部署和运维),团队能够以更加细粒度和轻松的方式解决数据架构的可扩展性、可管理性和自治性挑战。借助这种新颖的方法,团队可以更加细粒度地扩展其数据基础设施,从而降低数据孤岛和重复的风险。每个业务域团队也拥有更大的自主权,可以选择最适合其特定需求的工具和技术,同时利用中央提供的服务来管理整个数据生命周期。这使他们能够更快地行动,更敏捷地应对不断变化的业务需求。
此外,数据网格方法在处理不同类型的数据(例如结构化数据、半结构化数据和非结构化数据)方面也提供了更大的灵活性。它还通过分解单体数据架构并实现数据服务的清晰映射,从而带来更佳的数据治理实践。
分析工程师可以通过关注构建和维护支持多个团队和应用程序的独立、自主数据服务(例如共享数据模型,良好治理并加以文档化以确保轻松的数据可发现性、可访问性和安全性)为数据网格组织提供价值。在数据网格中工作的另一个重要方面是确保数据治理和安全性,这可以包括实施数据策略和程序(例如数据访问控制、数据排序和数据质量检查),以确保数据安全和高质量。此外,分析工程师还应与数据所有者和利益相关者合作,以理解和遵守所有数据存储和管理法规要求。
在数据网格中工作需要一种不同于传统单体数据架构的思维方式。分析工程师必须摒弃数据是中央资源的概念,而是将其视为可供各种团队使用的分布式自治服务。
数据产品
另一个需要定义的重要概念是数据产品。数据产品是可访问的应用程序,可提供数据驱动的洞察力,支持业务决策过程甚至实现自动化。在内部,数据产品可能包含用于检索、转换、分析和解释数据的组件。另一个重要方面是,数据产品应该以一种可以被其他内部或外部应用程序或服务访问和使用的方式来公开其数据。
以下是一些数据产品的示例:
- REST API: 允许用户查询特定业务数据模型的应用程序接口。
- 数据管道: 从各种源头摄取并处理数据的流程。
- 数据湖: 存储和管理大量结构化和非结构化数据的存储库。
- 数据可视化工具: 帮助用户理解和交流数据洞察力的工具。
数据产品还可以由微服务组成。微服务是一种小型、独立且专注的服務,可以独立开发、部署和扩展。它们可以通过 API 访问并在整个企业内重复使用。
dbt作为数据网格的推动者
dbt 开源工具通过创建、测试和管理数据服务,帮助数据工程师、分析工程师和数据分析师构建数据网格。它允许团队定义、测试和构建数据模型,并为这些模型创建一个清晰且定义良好的接口,以便其他团队和应用程序可以轻松使用它们。
dbt 支持创建数据网格的功能包括以下几点:
- 数据建模能力
dbt 提供简单易懂的基于 SQL 语法的数据建模功能,使数据工程师和数据分析师能够方便地协作定义和测试数据模型。
- 数据测试能力
dbt 提供测试框架,允许团队测试数据模型并确保其准确性和可靠性。这有助于在开发过程中尽早发现错误,并确保数据服务的高质量。
- 数据文档
dbt 可以为数据模型和服务生成文档,以便其他团队和应用程序轻松理解和使用。
- 数据跟踪能力
数据跟踪功能使团队可以追踪数据模型的来源。这有助于理解数据的使用方式及其来源。
- 数据治理能力
dbt 的数据治理功能可以强制执行数据访问控制、数据 lineage 和数据质量检查等数据治理策略,帮助确保数据安全和高质量。
虽然分析工程师的主要职责在于设计和实现数据模型,但值得注意的是,数据跟踪和治理能力可以显著提升分析工程流程的有效性。这些能力在数据模型需要追溯数据来源并遵守严格的数据治理策略的情况下尤其重要。
采用诸如数据网格等实践和治理模型,会根据数据环境的具体需求和复杂性而有所差异。许多成功的 dbt 部署都从更简单的单星模式数据模型开始,随着数据需求的演进,可能会探索数据网格等更高级的概念。
分析工程的核心
数据转换是指将数据从一种格式或结构转换为另一种格式或结构,使其更实用或更适用于特定应用或目的。这一过程必不可少,因为它使组织能够将原始的非结构化数据转换成宝贵的洞察力,从而为业务决策提供依据、改善运营并驱动增长。数据转换是分析生命周期中的关键步骤,组织拥有高效完成此任务的工具和技术至关重要。
数据转换的一些示例包括数据清洗和准备、数据汇总和摘要,以及用额外的信息丰富数据。dbt 工具因其可以帮助组织快速轻松地执行复杂的数据转换任务而被广泛用于数据转换领域,并且它可以与其他工具(例如 Airflow)集成,用于端到端的管道管理。
dbt 对分析师和企业利益相关者而言犹如“改善现场作业的实际场所”(日語:改善現場作業のための実際の場所,“gemba” 的意译)。当数据被转换并以易于使用的方式交付时,其价值才会真正体现给企业和利益相关者。
数据转换在 ETL(抽取-转换-加载) 策略中通常是在将数据加载到目标系统(例如数据仓库或数据湖)之前执行。该过程包括从各种来源提取数据,将其转换为符合目标系统结构和格式,然后加载到目标系统中。ETL 确保数据在跨系统和应用程序的使用过程中保持一致性。
相比之下,ELT(抽取-加载-转换) 是一种更新颖、更灵活的数据处理方法。在这个策略中,数据会先被提取并加载到目标系统中,然后才进行转换。ELT 具有多种优势,包括更高的灵活性以及比传统 ETL 范例支持更广泛数据应用的能力。一个重要优势是它可以在目标系统内直接进行各种数据转换并实现实时洞察力的灵活性。这种灵活性使企业能够更快地从数据中获取可操作的洞察力,并适应不断变化的分析需求。
然而,需要认识到由于存储原始数据或经过最少转换的数据,ELT 可能带来更高的存储和摄取成本。许多企业认为这些成本是合理的,因为其带来的灵活性可以为运营带来巨大价值。因此,随着基于云的数据仓库解决方案的出现及其提供的数据转换和处理能力的改进,ELT 变得越来越流行。
无论采用哪种策略,如果没有适当的数据清洗、转换和标准化,数据最终都可能变得不准确、不完整或难以使用,从而导致决策失误。
遗留流程
传统意义上的 ETL 流程通常复杂、耗时,并且需要专业技能才能进行开发、实施和维护。这类流程通常需要大量的手工编码和数据操作,这使得它们容易出错且难以扩展。此外,这些流程往往缺乏灵活性,无法适应不断变化的业务需求或新的数据源。随着数据量、种类和处理速度的不断增长,传统 ETL 流程日益显得力不从心,并逐渐被更现代、更灵活的 ELT 等方法所取代。
过去,ETL 通常使用自定义脚本或基于可视化的专门 ETL 工具来完成。这些脚本或工具会从各种来源(例如平面文件或数据库)中提取数据,对数据进行必要的转换,然后将数据加载到目标系统(例如数据仓库)中。传统 ETL 流程的一个示例是使用一系列 SQL 脚本和编程语言(例如 Java 或 C#)从关系数据库中提取数据,然后使用编程语言转换数据,最后将转换后的数据加载到数据仓库中。另一个示例是使用专门的 ETL 工具(例如 Oracle Data Integrator 或 IBM InfoSphere DataStage)跨系统提取、转换和加载数据。这些传统 ETL 流程可能非常复杂,难以维护和扩展,并且通常需要一支专门的开发人员团队。
使用 SQL 和存储过程进行 ETL/ELT
过去,人们经常在关系数据库管理系统 (RDBMS) 例如 SQL Server 或 Oracle 中使用存储过程来完成 ETL 任务。存储过程是预先准备好的 SQL 代码,可以存储在数据库引擎中以便重复调用。根据数据是流入还是流出,这些脚本会在源数据库或目标数据库中执行。
假设您想创建一个简单的存储过程,从一个表中提取数据、转换数据并加载到另一个表中,如示例 1-1 所示。
示例 1-1. 用于提取数据的 SQL 存储过程
CREATE PROCEDURE etl_example AS
BEGIN
-- 从源表提取数据
SELECT * INTO #temp_table FROM source_table;
-- 转换数据
UPDATE #temp_table
SET column1 = UPPER(column1), column2 = column2 * 2;
-- 将数据加载到目标表
INSERT INTO target_table
SELECT * FROM #temp_table;
END
此存储过程首先使用 SELECT INTO 语句从源表中提取所有数据并将其存储在临时表 (#temp_table) 中。然后它使用 UPDATE 语句将 column1 的值转换为大写,并将 column2 的值翻倍。最后,存储过程使用 INSERT INTO 语句将 #temp_table 中的数据加载到目标表 (target_table) 中。
注意:这是一个简单的例子,实际的 ETL 流程通常更加复杂,涉及许多额外的步骤,例如数据验证、处理空值和错误,以及记录过程结果。
虽然可以使用存储过程进行 ETL 处理,但需要注意的是,使用它们会有一些影响,例如编写和维护这些存储过程需要专门的知识和技能,并且缺乏灵活性和可扩展性。此外,将存储过程用于 ETL 会增加与其他系统和技术集成的难度,并且在 ETL 过程中遇到问题时也会 затруд (zài nàn) 故障排除。
使用ETL工具
正如之前提到的,ETL 工具是软件应用程序,通过提供可视界面、软件开发工具包 (SDK) 或编程库来加速构建摄取和转换管道。这些预先打包的代码和构件可以用于从各种来源提取、转换和加载数据到目标系统(例如数据仓库或数据湖)中。它们通常在许多组织中用于自动将数据从各种系统和数据库转移到中央数据仓库或数据湖,以便进行分析。
Airflow 是一个用于管理和调度数据管道的流行开源平台。它由 Airbnb 开发,近年来因其灵活性和可扩展性而广受欢迎。Airflow 允许用户使用 Python 代码定义、调度和监控数据管道,使数据工程师和科学家易于创建管道。
示例 1-2 展示了一个简单的 Airflow DAG。有向无环图 (DAG) 是一个没有有向环的的有向图。
示例 1-2. Airflow DAG 示例
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta
default_args = {
'owner': 'me',
'start_date': datetime(2022, 1, 1),
'depends_on_past': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
}
dag = DAG('simple_dag', default_args=default_args, schedule_interval=timedelta(hours=1))
task1 = BashOperator(
task_id='print_date',
bash_command='date',
dag=dag,
)
task2 = BashOperator(
task_id='sleep',
bash_command='sleep 5',
retries=3,
dag=dag,
)
task1 >> task2
这段代码定义了一个名为 "simple_dag" 的 DAG,它每小时运行一次。它包含两个任务,"print_date" 和 "sleep"。第一个任务执行 "date" 命令,它会打印当前日期和时间。第二个任务执行 "sleep 5" 命令,使任务休眠五秒。第二个任务的重试次数设置为 3 次。因此,如果任务失败,它将在放弃之前重试三次。这两个任务由操作符 ">>" 连接。这也意味着任务 2 依赖于任务 1,并且只有在任务 1 成功完成之后才会执行任务 2。
Airflow 是用于调度和管理 ETL 管道的强大工具,但它也存在一些限制。首先,Airflow 的设置和管理可能会非常复杂,尤其对于大型或复杂的管道而言。其次,它并非专门用于数据转换,可能需要额外的工具或自定义代码来执行某些类型的数据操作。
dbt 的兴起
dbt 是一个开源命令行工具,因其简化和 streamlining(优化)数据转换和建模过程而在数据分析领域变得越来越流行。相比之下,Airflow 是一个强大的开源平台,用于以编程方式创建、调度和监控工作流。将 dbt 与 Airflow 集成可以更有效地管理和自动化数据管道。Airflow 可以用于调度 dbt 运行,dbt 可以用于执行管道中的数据转换任务。
将 dbt 与 Airflow 集成可以让团队更有效地管理整个数据管道,从数据提取到加载到数据仓库,确保数据始终是最新的和准确的。这种集成使数据管道任务的自动化、管道的调度和监控以及出现的问题的故障排除变得更加容易。
为了展示构建简单 dbt 模型的简易性,假设您想要构建一个模型来计算公司总收入,方法是将每个订单的收入相加。可以使用一个 dbt 模型文件来定义模型,该文件指定计算的 SQL 代码以及任何必需的依赖项或参数。示例 1-3 展示了模型文件可能的样子。
示例 1-3. dbt 模型
{{ config(materialized='table') }}
select
sum(orders.revenue) as total_revenue
from {{ ref('orders') }} as orders
dbt 的主要优势之一是,分析工程师可以用一种简单的高级语言编写可重用、可维护和可测试的数据转换代码,从而消除了编写 SQL 的复杂性。这促进 了团队在数据项目上的协作并降低了数据管道中出现错误的风险。
dbt 的另一个好处是它可以实现更有效的管道管理。通过与 Airflow 等编排工具以及 Dagster 或 Prefect 等其他工具以及 dbt Labs 自己 的 dbt Cloud 产品集成,dbt 使团队能够有效地规划、调度和监控数据管道。这确保数据始终保持最新和准确。
dbt 和 Airflow 等编排工具之间的协同作用可以实现无缝的数据刷新和新逻辑的部署,类似于软件工程中的 CI/CD 实践。这种集成确保了当新数据可用或转换更新时,数据管道可以被高效地编排和执行,从而提供可靠和及时的洞察力。
总而言之,dbt 正变得越来越普遍,适用于寻求改善数据分析能力和简化数据管道的组织。尽管它仍是一项相对较新的技术,但许多公司都在使用它,并且它被认为是数据专业人员的宝贵工具。第 4 章将更深入地介绍 dbt 的功能和特性。