使用SQL和dbt的分析工程——分析工程

分析学的历史发展包括一系列重要的里程碑和技术,这些里程碑和技术塑造了今天的领域。它始于20世纪80年代数据仓库的出现,为组织和分析业务数据创造了基础框架。计算机科学家比尔·因蒙(Bill Inmon)在20世纪80年代和90年代持续发表著作,被广泛认为为数据仓库提供了第一个坚实的理论基础。

接下来的发展浪潮发生在拉尔夫·金博尔(Ralph Kimball)成为数据仓库和商业智能(BI)的另一位领先贡献者,于1996年出版了他有影响力的作品《数据仓库工具包》。金博尔的工作为维度建模奠定了基础,标志着分析演进的又一关键里程碑。因蒙和金博尔的贡献一起,跨越20世纪末,对塑造数据仓库和分析领域的格局发挥了关键作用。

在21世纪初,像谷歌和亚马逊这样的科技巨头的出现,推动了对处理海量数据的更先进解决方案的需求,导致了Google File System和Apache Hadoop的发布。这标志着大数据工程时代的开始,专业人士利用Hadoop框架处理大量数据。

公有云提供商如亚马逊网络服务(AWS)的崛起彻底改变了软件和数据应用程序的开发和部署方式。AWS的开创性产品之一是在2012年推出的Amazon Redshift,它代表了在线分析处理(OLAP)和传统数据库技术的有趣结合。在初期,Redshift需要数据库管理员执行任务,如清理和扩展以保持最佳性能。

随着时间的推移,云原生技术不断演进,Redshift本身也经历了重大增强。在保留其核心优势的同时,Redshift的新版本以及像Google BigQuery和Snowflake这样的云原生平台简化了许多这些管理任务,为各种规模的企业提供了先进的数据处理能力。这种演进突显了云数据处理生态系统中持续创新的重要性。

现代数据堆栈,包括诸如Apache Airflow、数据构建工具(dbt)和Looker等工具,进一步转变了数据工作流。随着这些进展,"Big Data engineer" 这一术语变得过时,为数据工程师的更广泛和更具包容性的角色让路。这一转变在Maxime Beauchemin的有影响力的文章中得到了认可,他是Apache Superset和Airflow的创作者,也是Facebook和Airbnb的首批数据工程师之一,尤其在他的文章《数据工程师的崛起》中强调了数据工程在行业中日益重要的地位。所有这些数据领域的迅猛发展导致了数据专业人员角色的重大变化。随着数据工具的出现,简单任务正在变成战略任务。

今天的数据工程师扮演多面角色,涵盖数据建模、质量保证、安全性、数据管理、架构设计和编排等方面。他们越来越多地采用软件工程实践和概念,如功能数据工程和声明式编程,以增强他们的工作流程。虽然Python和结构化查询语言(SQL)是数据工程师不可或缺的语言,但值得注意的是,在这个领域,编程语言的选择可能会有很大的变化。根据项目的具体需求和偏好,工程师可能会利用其他语言,如Java(常用于管理Apache Spark和Beam)、Scala(在Spark和Beam生态系统中也很普遍)、Go等。大型组织的数据工程师通常会结合Java和SQL等语言。

组织越来越向分散的数据团队、自助平台和替代数据存储选项转变。随着数据工程师不得不适应所有这些市场变化,我们经常看到一些人承担更技术的角色,专注于平台启用。其他数据工程师更贴近业务,设计、实施和维护将原始数据转化为高价值信息的系统,适应这个每天都在推出新工具、孕育着精彩分析工程世界的加速行业。

在本章中,我们介绍了分析工程领域及其在基于数据的决策过程中的作用。我们讨论了在今天的数据驱动世界中分析工程的重要性,以及分析工程师的主要角色。此外,我们将探讨分析工程生命周期如何用于管理分析过程,以及如何确保生成的数据和洞察的质量和准确性。我们还将讨论塑造分析工程领域的当前趋势和技术,从历史到现在,涉及新兴概念如数据网格,并讨论抽取、加载和转换(ELT)与抽取、转换和加载(ETL)策略之间的基本选择,以及全球范围内采用的许多数据建模技术。

数据库及其对分析工程的影响

相当长的一段时间以来,数据越来越成为那些希望在竞争中保持领先、改进内部流程或仅仅了解客户行为的公司关注的焦点。随着新工具、新工作方式以及数据科学和商业智能等新知识领域的出现,如今要全面调查和了解数据领域变得越来越困难。

技术的自然进步导致了数据分析、可视化和存储工具的过剩供应,每个工具都提供独特的功能和能力。然而,这些工具的快速部署导致了一个碎片化的局面,要求个人和组织时刻保持对最新技术发展的了解,同时还必须谨慎选择如何使用它们。有时这种丰富多样性会导致混乱,并需要持续的学习和适应。

工作实践的演变伴随着工具的多样化。动态和敏捷的方法已经取代了传统的数据管理和分析方法。迭代实践和跨职能协作为数据项目引入了灵活性和速度,但同时也在协调各种团队和角色的工作流程方面提出了挑战。在数据过程的不同方面融合时,有效的沟通和协调变得至关重要,这需要对这些新型工作实践有全面的理解。

专业领域,如数据科学和商业智能,也增加了数据领域的复杂性。数据科学家应用先进的统计和机器学习技术来检测复杂模式,而商业智能专家则从原始数据中提取有价值的信息以产生实用的见解。这些专业领域引入了精细的技术,需要定期的技能发展和学习。成功采用这些实践需要对教育的专注承诺和灵活的技能获取方法。

随着数据在数字领域传播,它带来了无法预料的数量、种类和速度。数据的涌现,以及当今数据来源的复杂特征,如物联网设备和非组织化文本,使得数据管理变得更加苛刻。融入、转换和评估数据精度的细节变得更加明显,强调了确保可靠和准确洞察的强大方法的必要性。

数据世界的多层次性使其变得复杂。作为来自各个领域(包括计算机科学、统计学和领域专业知识)技能的融合结果,一种合作和沟通的策略是必要的。这种跨学科的互动强调了高效团队合作和知识共享的重要性。

但这并不总是这样。几十年来,电子表格一直是存储、管理和分析各个层次的数据的标准技术,无论是用于业务运营管理还是用于分析理解。然而,随着企业变得更加复杂,对与数据相关的决策制定的需求也变得更加迫切。第一个解决方案以数据库的形式出现。数据库可以被定义为一个有组织的、通常以电子形式存储在计算机系统中的结构化信息或数据的集合。这些数据可以是文本、数字、图像或其他类型的数字信息。数据以一种有利于使用和检索的方式存储,使用一组预定义的规则和结构,称为模式。数据库是分析的重要组成部分,因为它们提供了一种高效存储、组织和检索大量数据的方式,允许分析人员轻松访问他们需要进行复杂分析的数据,以获取在其他情况下可能难以或不可能获得的见解。此外,可以配置数据库以确保数据的完整性,从而保证正在分析的数据是准确和一致的,从而使分析更加可靠和可信。

在分析中使用数据库的最常见方式之一是数据仓库技术,即构建和使用数据仓库。数据仓库是一个大型的、集中的数据存储,旨在简化数据使用。数据仓库中的数据通常从各种来源提取,例如事务系统、外部数据源和其他数据库。然后对数据进行清理、转换和集成,形成一个单一、一致的数据模型,通常遵循星型模式或数据仓库模型等维度建模技术。

数据库在分析中的另一个重要用途是数据挖掘过程。数据挖掘使用统计和机器学习技术来发现大型数据集中的模式和关系。通过这种方式,可以识别趋势,预测未来行为,以及进行其他类型的预测。

因此,数据库技术和数据科学家在数据科学的出现中发挥了至关重要的作用,通过提供一种高效存储、组织和检索大量数据的方式,使数据科学家能够处理大型数据集并专注于重要的事物:从数据中获取知识。

使用SQL和其他编程语言,如Python或Scala,可以与数据库进行交互,使数据科学家能够执行复杂的数据查询和操作。此外,使用诸如Tableau和Microsoft Power BI等数据可视化工具,这些工具可以轻松与数据库引擎集成,使数据科学家能够以清晰直观的方式呈现他们的发现。

随着大数据的出现和对存储和处理庞大数据集需求的增长,各种数据库技术应运而生,以满足不同的需求。例如,数据分析师经常依赖数据库进行各种应用,包括数据仓库、数据挖掘和与Tableau等商业智能工具的集成。

然而,深入了解这些用例以理解对分析工程的需求是重要的。当直接将商业智能工具连接到运营数据库(在线事务处理 [OLTP] 副本)时,性能和可伸缩性可能受到限制。这种方法对于较小的数据集和简单的查询可能效果良好,但随着数据量的增加和分析的复杂性提高,可能导致性能瓶颈和次优的查询响应时间。

这就是分析工程发挥作用的地方。分析工程师是优化数据工作流的专家,转换和聚合数据以确保其以适合分析任务的正确格式。他们设计并维护从各种来源ETL(抽取、转换、加载)数据到优化的数据仓库或数据湖的数据管道。通过这样做,他们帮助组织克服直接OLTP连接的限制,使用Tableau等工具进行更快速、更高效的数据分析。实质上,分析工程弥合了原始数据和可操作见解之间的差距,确保数据分析师和科学家能够有效地处理大型、复杂的数据集。

云计算及其对分析工程的影响

在过去的几十年里,世界面临了一系列复杂的挑战,这些挑战具有重要的技术意义。经济衰退推动了金融技术和风险管理系统的创新。地缘政治紧张局势要求在网络安全方面取得进展,以保护关键基础设施和敏感数据。全球卫生危机强调了先进的数据分析和预测建模在疾病监测和管理方面的重要性。此外,迫切需要应对气候变化推动了先进的可再生能源技术的发展以及可持续工程解决方案,以实现气候目标。

在这些挑战之间,追求利润和增长仍然是全球企业的主要驱动力。然而,人力劳动时间的价值已经具备了新的维度,导致企业运营方式和云计算如何适应它们发生了重大变化。这种变化体现在对托管和无服务器服务的日益采用,从而减少了对全职支持人员(如数据库管理员)的依赖。

随着公司适应这个不断变化的格局,创新、差异化和业务模型以及战略的可持续性已成为企业在迅速变化的世界中寻求成功的基本考虑因素。在这个背景下,信息技术和系统行业找到了一个良好的机会,以增强其能力,帮助组织克服这个充满不确定性和压力的世界。操作模型的合理化变得迫在眉睫,需要重新评估数据中心和定价结构。此外,产品和服务的提供必须主要关注易用性、低延迟、提高安全性、更广泛的实时工具、更多集成、更多智能、更少代码以及更快的上市时间。

组织已经认识到投资于创新工具、推动数字转型,并采用以数据为中心的决策方法以实现更大的灵活性和竞争优势的重要性。为了实现这些目标,许多企业正专注于利用来自内部和外部来源的经过精心策划的数据。这种经过精心构建的数据可以为业务绩效提供有价值的见解。在行业中,创建、可视化和分析以可访问格式呈现的互联业务数据的实践通常被称为数据分析。从历史上看,它也被称为商业智能,这两个术语密切相关。虽然商业智能是分析的子集,专注于面向业务的决策制定,数据分析涵盖了一个更广泛的领域,包括产品分析、运营分析和其他几个专业领域。商业智能和数据分析在帮助组织通过数据驱动的洞察获得竞争优势方面发挥着关键作用。

尽管数据分析提供了许多优势,可以改善和重塑业务战略,并监控绩效,但它需要大量的财务投资,包括服务器、软件许可证以及数据工程师、数据科学家和数据可视化专家等专业人员的投入。在经济危机时期,与IT硬件、软件和专业人员相关的高前期和运营成本可能被视为不切实际和不吸引人。

因此,基于企业自己场地设置和管理数据分析基础设施的本地解决方案通常失去吸引力。这对于对这一概念不熟悉的分析新手尤其如此。本地解决方案通常需要大量投资于硬件、软件和持续维护。与基于云的数据分析解决方案相比,它们也较不灵活和可扩展。这种偏好的转变为满足与传统数据分析相似的业务需求的新基于云的数据分析解决方案扫清了道路。然而,与依赖于本地服务器和软件不同,基于云的解决方案利用云计算服务加速部署并减少基础设施成本。

云计算在各行各业的不断推广促使微软、谷歌和亚马逊等软件供应商开发了先进的数据分析和数据仓库工具。这些工具被设计为在云计算范式中运行,并利用共享的网络资源,以实现更大的可访问性和简化的部署。这一趋势的生动例证是微软的综合数据分析平台,Microsoft Fabric。

与此同时,我们在本书后面将更详细地讨论的 dbt Labs 的 dbt(data build tool)是一款出色的混合产品。与Hadoop类似,dbt是一个开源解决方案,使用户能够根据其特定需求灵活部署,无论是在云中还是在本地。在其云版本中,dbt与主要的云平台无缝集成,包括Microsoft Azure、Google Cloud Platform (GCP)和AWS。这种开源性质使组织能够根据其独特的要求和基础设施偏好自定义其部署。

尽管基于云的数据分析解决方案和平台是全球范围内的趋势,也是现代数据平台的核心概念,但重要的是要认识到云计算解决方案既带来了好处,也带来了不可忽视的风险。这些风险包括潜在的安全问题、服务器的物理位置以及远离特定提供商的成本。

然而,云技术目前正在改变组织部署和构建信息系统和技术解决方案的方式,数据分析也不例外。这就是为什么认识到转向云计算很快将不再是一种选择而是一种必要性的重要性。理解以服务形式提供分析解决方案的好处是重要的。否则,如果不解决这一过渡问题,使用缺乏灵活性和可扩展性的本地解决方案向决策者提供及时信息可能变得越来越具有挑战性。

然而,尽管云技术带来了许多好处,如规模经济和灵活性,但它们也带来了信息安全问题。在云基础设施中集中数据使其成为未经授权攻击的吸引目标。为在数据环境中成功应用云计算,组织必须了解并减轻与云计算相关的风险。关键风险包括数据隐私、失去控制、数据不完整或不安全删除、未经授权的内部访问、数据可用性以及复杂的成本。

数据隐私是一个重要的关切,因为要验证供应商是否符合法律和标准处理数据是具有挑战性的,即使供应商的公开审计报告可以帮助建立信任。在非集成的情况下,随着数据在各种系统和数据中心之间流动,数据安全风险会成倍增加,增加拦截和同步的风险。另一个重要的风险是供应商依赖性,这发生在数据管理的责任完全由一个服务提供商承担的情况下,这样会限制迁移到其他解决方案的能力。这种依赖性最终会限制组织对决策的控制和对数据的权威。虽然这只是一些已知的风险,我们已经可以理解组织需要掌握这些风险,以有效地获得基于云的数据分析解决方案的好处。这需要仔细考虑、遵循安全标准和最佳实践,以及进行持续的成本控制来衡量投资回报。

如果所有风险在正确的数据战略中得到正确的解决和缓解,该战略概述了组织将如何管理其信息资产,包括云战略、技术、流程、人员和涉及的规则,那么与没有数据战略的组织相比,该组织可以获得实质性的竞争优势。通过专注于云计算并利用云数据平台,组织可以将原始数据转化为有意义的见解,加速建立坚实的数据基础的过程。这使得能够高效地获取、构建和分析相关数据,甚至支持采用人工智能技术,同时以比传统方法更短的时间和更低的成本创造价值。

有趣的是,云数据平台、分析和人工智能之间的关系是共生的。实施云数据平台加速了采用以分析为驱动的架构,并实现了人工智能计划的全面运作。它使组织能够使用所有相关数据,获得企业范围的见解,并开启新的业务机会。通过消除管理多个工具的需要,组织可以专注于数据现代化,加速洞察的发现,并受益于现有的技术合作伙伴关系,从而推动他们的人工智能之旅。

这就是为什么说云计算一直是现代数据平台和基于云的分析和人工智能平台的核心组成部分,这些平台每天都在不断增长,从而促使该行业发生变革。

数据分析的生命周期

数据分析生命周期是一系列步骤,将原始数据转化为有价值且易于消费的数据产品。这些产品可以是良好管理的数据集,也可以是仪表板、报告、API甚至是Web应用程序。换句话说,它描述了如何创建、收集、处理、使用和分析数据以实现特定的产品或业务目标。

组织动态的不断复杂化直接影响了数据的处理方式。许多人必须使用相同的数据,但目标各异。虽然高级管理人员可能只需要了解一些顶层关键绩效指标以追踪业务绩效,而中层管理人员可能需要更详细的报告来支持日常决策。

这突显了需要在相同的数据基础上采用受管理和标准化的方法来创建和维护数据产品的需求。鉴于组织必须就其数据治理、技术和管理流程做出许多决策,遵循结构化的方法对于记录并不断更新组织的数据战略是至关重要的。

因此,数据分析生命周期是理解和映射创建和维护分析解决方案的各个阶段和流程的重要框架(图1-1)。它是数据科学和分析中的重要概念,为管理创建有效分析解决方案所需的各种任务和活动提供了结构化的方法。

数据分析生命周期通常包括以下阶段:

  • 问题定义

分析周期的第一阶段涉及了解需要解决的问题。这包括确定业务目标、可用的数据以及解决问题所需的资源。

  • 数据建模

在确定业务需求并完成对数据源的评估后,可以根据最符合需求的建模技术对数据进行建模。您可以选择菱形策略、星型模式、数据仓库,甚至完全非规范化的技术。所有这些概念将在第二章中进行讨论。

  • 数据摄取和转换

接下来的阶段是摄取和准备来自源系统的数据,使其与创建的模型匹配。根据整体信息架构,您可以选择模式写入策略,在此策略下,您会将更多精力投入将原始数据直接转化为模型;或者选择模式读取策略,在此策略下,您会以最小的转换将数据摄取并存储,将繁重的转换移到数据平台的下游层。

  • 数据存储和结构化

一旦设计并可能实施了数据管道,您需要决定要使用的文件格式------简单的Apache Parquet或更先进的格式,如Delta Lake或Apache Iceberg------以及要使用的分区策略和存储组件------基于云的对象存储,如Amazon Simple Storage Service(S3),或者更像数据仓库的平台,如Redshift、BigQuery或Snowflake。

  • 数据可视化和分析

一旦数据可用,下一步是探索它、可视化它,或者创建直接支持决策或启用业务流程监控的仪表板。这个阶段非常业务导向,应与业务利益相关者密切协调。

  • 数据质量监控、测试和文档

虽然被描绘为分析生命周期的最后阶段,但数据质量应是全流程的关注点,并且应通过整个流程的设计来确保。这涉及实施所有质量控制,以确保利益相关者可以信任您暴露的数据模型,记录所有转换和语义含义,并确保在数据持续流动时沿着管道进行适当的测试。

借助dbt,可以更轻松高效地部署这些组件,因为它允许我们并行构建它们,并贯穿整个生命周期。文档编制、测试和质量控制成为同时执行的常见任务。这将在第四章中详细阐述。

分析生命周期是一个关键概念,使组织能够以结构化和一致的方式处理数据工程、科学和分析流程。通过遵循一个结构化的过程,组织可以确保他们正在解决正确的问题,使用正确的数据,并构建准确可靠的数据产品,最终实现更好的决策和更好的业务结果。

分析工程师的新角色

正如前面所提到的,数据科学家和分析师现在可以轻松访问他们需要执行复杂分析并获取见解的数据,否则这些数据将难以获得或根本无法获得。然而,随着存储和分析的数据量不断增长,对组织拥有数据专业人员的需求变得越来越重要,以帮助它们管理数据并提供所需的基础设施。

最近新兴的专业数据工程师领域,被称为分析工程师,在开发和维护数据库和数据管道方面发挥着重要作用,使数据科学家和分析师能够专注于更高级的分析任务。分析工程师负责设计、构建和维护能够将数据转化为有价值见解并做出数据驱动决策的数据架构。

此外,从传统的强制模式写入的ETL过程到采用模式读取的ELT方法的转变意味着数据现在在转换之前就已经存储在数据仓库中。这为那些非常了解业务并具备技术能力将原始数据建模为清晰、定义良好的数据集的超级技术分析师------分析工程师提供了机会。如果你在数据仓库和ETL范 paradigm 内寻找这些类型的技能,那么就需要具备软件工程和数据分析技能的专业人员,这将更难找到。

分析工程师充当数据平台工程师与数据分析师之间的桥梁,专注于构建支持数据平台的技术基础设施的工程师,而数据分析师专注于将数据转化为有深度见解的数据产品。他们的工作是创建经过充分测试、更新且有文档记录的数据集,供组织的其他部门使用以回答他们自己的问题。他们在技术上足够精通,能够应用软件开发的最佳实践,如版本控制和持续集成和持续部署(CI/CD),同时也需要能够有效地与利益相关者沟通。

我们可以将其类比为土木工程:数据平台工程师是分析项目的基础,负责确保基础设施稳健,包括管道、电力系统和结构基础。他们为一切的来临奠定基础。

分析工程师可以被视为建筑师。他们利用数据工程师创建的坚实基础,设计与业务模型一致的结构,构建从卓越的仪表板到有价值的数据模型的一切。他们弥合了技术基础设施与业务目标之间的差距。

在这个类比中,数据分析师就像室内设计师。他们进入已建造的建筑内部,不仅确保内容与用户保持一致,还使其用户友好并根据数据使用者的特定需求进行定制。这些角色共同合作,创建出一个全面且功能齐备的分析环境。

从数据分析生命周期来看,数据平台工程师构建平台并将原始数据导入企业范围的数据存储中。另一方面,分析工程师获取原始数据并将其转换以匹配业务需要支持决策的分析数据模型。

分析工程师的职责

随着数据的数量和复杂性以及其各种应用的不断增长,分析工程师的角色变得愈发重要。这包括从设计和实施数据存储和检索系统,到创建和维护数据管道,以及开发和部署机器学习模型。在这个充满活力的领域中,分析工程师在利用不断增长的数据资源并在各种应用中最大化其价值方面发挥着至关重要的作用。

根据最新的角色趋势,其中一个主要的责任是设计和实施高效的数据存储和检索系统。这包括与数据库和数据仓库技术合作,设计能够处理大型和复杂数据集的数据模型和结构。另一个即时的责任是创建和维护数据管道,从各种来源提取数据,对其进行转换,然后加载到中央存储库进行分析。

对于大多数分析工程师而言,机器学习模型的开发和使用可能不太明显,但仍然在进行。这包括与数据科学家合作以了解他们的需求,选择并实施适当的算法,并确保模型使用正确的训练和测试数据进行训练和部署。当情况不符合时,分析工程师会协作构建适当的数据管道,持续为数据科学家提供适当的训练和测试数据。

此外,分析工程师负责监控和维护机器学习模型的性能,既通过帮助构建离线评估,又通过将特定于模型的指标与业务指标结合,进行在线监控。

分析工程师通常精通编程语言和工具,如Python、R、SQL和Spark,以实施数据管道、数据模型和机器学习模型。他们还应熟悉云计算平台,如AWS、GCP或Azure,以部署和扩展他们的解决方案。

观察分析工程师在多家公司中的职责,可能包括以下方面:

  • 设计和实施能够处理大型和复杂数据集的数据存储和检索系统,如数据库和数据仓库。创建并维护数据管道,从各种来源提取、转换和加载数据到中央存储库进行分析。
  • 通过执行数据质量检查、跟踪数据流动以及实施数据安全措施,确保数据准确、完整、一致且可访问。
  • 利用云计算平台,如AWS、GCP或Azure,部署和扩展分析解决方案,以及优化数据基础设施的可扩展性、安全性和成本。
  • 优化数据存储和检索系统、数据管道和机器学习模型的性能,确保它们能够处理大量和复杂的数据。
  • 使用编程语言和工具,如Python、R、SQL和Spark,实施数据管道、数据模型和机器学习模型。
  • 与数据科学家合作,了解他们的需求,选择并实施适当的算法,并确保机器学习模型得到正确的训练和部署。监视和维护机器学习模型的性能,并在需要时进行故障排除和优化。
  • 保持对数据工程、机器学习和分析领域的最新技术和趋势的了解,不断寻找改进组织数据基础设施和分析能力的机会。 分析工程师的角色涵盖范围广泛,需要结合技术技能、解决问题的能力和对业务需求的理解。分析工程师必须熟悉数据科学的技术和业务方面,能够弥合数据科学家和IT之间的鸿沟。

在数据网格中实现分析

数据网格是一个现代框架,概述了组织的数据战略。它使业务领域团队能够负责其数据及提供对其访问的服务,而不仅仅依赖于中央数据团队。它将单片式数据架构分解为一组独立的、自治的数据服务,实现更精细的扩展、更大的自主性和更好的数据管理。它在处理不同类型的数据时提供更大的灵活性,并促进实验、创新和协作的文化。通过数据网格,企业应能够更快地行动,更迅速地应对不断变化的业务需求。

数据网格方法作为一种架构模式的出现彻底改变了分析人员与数据基础设施互动的方式。通过将单片式数据架构分解为一系列独立的、自治的数据服务,这些服务可以独立开发、部署和运营,团队可以以更细粒度、更轻松的方式解决数据架构的可扩展性、可管理性和自治性方面的挑战。

通过这种创新性的方法,团队可以更细粒度地扩展其数据基础设施,减少数据孤立和重复的风险。每个业务领域团队还具有更多的自治权,使他们能够选择最适合其特定需求的工具和技术,同时利用中心提供的服务来管理整个数据生命周期。这使他们能够更快速、更灵活地应对不断变化的业务需求。此外,数据网格方法在处理不同类型的数据(如结构化、半结构化和非结构化数据)时提供了更大的灵活性。它还通过打破单片式数据架构并实现数据服务的清晰映射,促进更好的数据治理实践。

在数据网格组织中,分析工程师通过专注于构建和维护支持多个团队和应用程序需求的独立、自治的数据服务,如共享数据模型,为数据的发现、访问和安全性提供了无缝的支持。在数据网格工作的另一个有意义的方面是确保数据治理和安全性,这可能包括实施数据政策和流程,如数据访问控制、数据排序和数据质量检查,以确保数据安全且具有高质量。此外,分析工程师应与数据所有者和利益相关方合作,了解并遵守所有数据存储和管理的法规要求。

在数据网格中工作需要一种不同于传统单片式数据架构的思维方式。分析工程师必须摆脱将数据视为集中式资源的观念,而将其视为各种团队可以使用的分布式自治服务。

数据产品

另一个我们一直在使用且重要定义的概念是数据产品。这些是可访问的应用程序,提供对数据驱动见解的访问,将支持业务决策过程,甚至可能自动执行它们。在内部,它们可能包含用于检索、转换、分析和解释数据的组件。另一个重要方面是,数据产品应该以一种使其数据能够被其他内部或外部应用程序或服务访问和使用的方式公开。

一些数据产品的例子如下:

  • 允许用户查询特定业务数据模型的 REST API
  • 从各种来源摄取和处理数据的数据管道
  • 存储和管理大量结构化和非结构化数据的数据湖
  • 帮助用户理解和传达数据见解的数据可视化工具

数据产品还可以包括微服务。这些是小型、独立且专注的服务,可以独立开发、部署和扩展。它们可以通过 API 访问,并在整个企业中进行重复使用。

dbt作为数据网格的启用者

dbt是一个开源工具,帮助数据工程师、分析工程师和数据分析师通过提供创建、测试和管理数据服务的方式来构建数据网格。它允许团队定义、测试和构建数据模型,并为这些模型创建清晰而明确定义的接口,以便其他团队和应用程序可以轻松使用它们。

支持创建数据网格的dbt功能包括以下内容:

  1. 数据建模功能 数据建模功能允许团队使用简单而熟悉的基于SQL的语法定义其数据模型,使数据工程师和数据分析师能够一起定义和测试数据模型。
  2. 数据测试功能 dbt提供了一个测试框架,使团队能够测试其数据模型并确保其准确可靠。这有助于在开发过程的早期发现错误,并确保数据服务具有高质量。
  3. 数据文档 dbt使数据模型和服务能够被记录,以便其他团队和应用程序能够轻松理解和使用它们。
  4. 数据追踪功能 数据追踪功能允许团队追踪数据模型的来源。这使得能够轻松了解数据的使用方式以及它的来源。
  5. 数据治理功能 数据治理功能使得能够执行数据治理政策,如数据访问控制、数据血缘和数据质量检查,有助于确保数据安全且具有高质量。

虽然分析工程的主要焦点是设计和实施数据模型,但需要注意的是,数据追踪和治理功能可以显著提升分析工程流程的效果。这些功能在数据模型需要追踪数据来源并遵循严格的数据治理政策的情况下尤其有价值。采用这些做法和治理模型,包括数据网格,可能会因数据环境的具体需求和复杂性而有所不同。许多成功的dbt部署从更简单的单星模式数据模型开始,随着时间推移,可能会探索像数据网格这样的高级概念,以满足不断演进的数据需求。

分析工程的核心

数据转换将数据从一种格式或结构转换为另一种,使其更适用于特定的应用或目的。这个过程是必要的,因为它使组织能够将原始的、非结构化的数据转化为有价值的见解,从而可以支持业务决策,改善运营并推动增长。

数据转换是分析生命周期中的关键步骤,组织需要拥有进行这项任务的工具和技术,以确保高效且有效地完成。数据转换的一些示例包括清理和准备数据、聚合和总结数据以及使用附加信息丰富数据。

dbt在数据转换方面的使用非常广泛,因为它使组织能够快速而轻松地执行复杂的数据转换任务,并且可以与其他工具(如Airflow)集成,实现端到端的数据流水线管理。

对于分析师和企业利益相关者来说,dbt是实际操作的现场。当数据以易于使用的形式进行转换和传递时,对于企业和利益相关者而言,才真正创造了价值。

在ETL策略中,数据转换通常在数据加载到目标系统(如数据仓库或数据湖)之前执行。数据从各种来源提取出来,经过转换以匹配目标系统的结构和格式,然后加载到目标系统中。这个过程确保数据在各个系统和应用之间是一致且可用的。

相比之下,ELT策略代表了一种更新且更灵活的数据处理方法。在这种策略中,数据首先被提取并加载到目标系统中,然后才进行转换。ELT具有多个优势,包括提高灵活性以及支持比传统的ETL范式更广泛的数据应用。一个显著的好处是ELT在目标系统内直接支持各种数据转换和实时洞察,使组织能够更快地从数据中获得可操作的洞察,并适应不断变化的分析需求。

然而,需要注意的是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 所示。

sql 复制代码
-- 示例 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 过程中出现的问题变得更加具有挑战性。

使用ETL工具

如前所述,ETL 工具是一种软件应用程序,通过提供可视化界面、软件开发工具包(SDK)或编程库以及预打包的代码和构件,加速构建摄取和转换流水线的过程。这些流水线可用于从各种来源提取、转换和加载数据到目标系统,如数据仓库或数据湖。它们通常在许多组织中被使用,以自动化从各种系统和数据库传输数据到中央数据仓库或数据湖的过程,从而便于进行分析。

Airflow 是一个流行的开源平台,用于管理和调度数据流水线。由Airbnb开发,近年来因其灵活性和可扩展性而变得流行。Airflow 允许用户使用 Python 代码定义、调度和监视数据流水线,使其易于由数据工程师和科学家创建。

示例 1-2 展示了一个简单的 Airflow DAG。有向无环图(DAG)是一个没有有向循环的有向图。

ini 复制代码
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 可以通过提供一组用于数据转换的最佳实践和约定,以及执行和管理数据转换的简单直接的界面,来解决 Airflow 的这些限制。它还可以与 Airflow 集成,提供一个完整的 ETL/ELT 解决方案,易于设置和管理,同时对数据流水线具有高度的灵活性和控制。

dbt 革命

dbt是一种开源的命令行工具,因其简化和优化数据转换和建模过程而在数据分析行业日益流行。另一方面,Airflow是一个功能强大的开源平台,用于以编程方式创建、调度和监视工作流。当dbt与Airflow集成时,数据管道可以更有效地进行管理和自动化。Airflow可用于调度dbt运行,而dbt可用于执行管道中的数据转换任务。

集成dbt和Airflow使得从数据提取到加载到数据仓库的整个数据管道过程更加简化,确保数据始终保持最新和准确。该集成使得更容易自动化数据管道任务、调度和监视管道,并在问题出现时进行故障排除。

为了演示构建一个简单dbt模型的简易性,想象一下你想要构建一个模型,该模型通过累加每个订单的收入来计算公司的总收入。可以使用dbt模型文件定义该模型,该文件指定了计算的SQL代码以及任何所需的依赖项或参数。示例1-3展示了模型文件可能的样子。

示例1-3. dbt模型

csharp 复制代码
{{ 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及其功能和特性。

总结

在过去的几十年里,数据管理领域经历了深刻的变革,从基于结构化方法的数据存储和访问,如基于SQL的存储过程,转向了更灵活和可扩展的工作流。这些现代工作流得到了强大工具(如Airflow和dbt)的支持。Airflow促进了动态编排,而dbt将分析代码提升到生产级软件的水平,引入了数据测试和转换的创新方法。

在这个充满活力的环境中,新的角色应运而生,分析工程师站在数据工程和数据分析的交叉点上,确保提供强大的洞察力。尽管工具和角色发生了演变,但数据的内在价值仍然没有改变。然而,数据管理正在演变成一门不仅关注数据本身,还关注操控数据的专业人员的学科。

即使在这些先进的背景下,核心挑战仍然存在:获取关键数据,保持最高的数据质量标准,高效存储数据,并在数据交付中满足利益相关者的期望。在数据价值链的核心是数据建模的复兴。高效的数据建模不仅仅涉及数据收集,它还结构化和组织数据,以反映现实世界的关系和层次结构。第2章将深入探讨数据建模及其在分析工程中的关键作用。

在本章中,我们探讨了数据管理的演变,分析工程师角色的出现,以及数据网格和ELT与ETL策略之间的区别。这一多元主题旨在提供对数据领域的综合概述。

相关推荐
ycsdn1036 分钟前
Caused by: org.apache.flink.api.common.io.ParseException: Row too short:
大数据·flink
菜鸟的人工智能之路1 小时前
桑基图在医学数据分析中的更复杂应用示例
python·数据分析·健康医疗
DolphinScheduler社区2 小时前
Apache DolphinScheduler + OceanBase,搭建分布式大数据调度平台的实践
大数据
时差9533 小时前
MapReduce 的 Shuffle 过程
大数据·mapreduce
kakwooi4 小时前
Hadoop---MapReduce(3)
大数据·hadoop·mapreduce
数新网络4 小时前
《深入浅出Apache Spark》系列②:Spark SQL原理精髓全解析
大数据·sql·spark
阡之尘埃7 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
昨天今天明天好多天9 小时前
【数据仓库】
大数据
油头少年_w10 小时前
大数据导论及分布式存储HadoopHDFS入门
大数据·hadoop·hdfs
布说在见10 小时前
层次与网络的视觉对话:树图与力引导布局的双剑合璧
信息可视化·数据挖掘·数据分析