SQL 与 dbt 分析工程实践——分析工程

0 阅读35分钟

Analytics 的历史发展包含许多重要里程碑和技术,它们共同塑造了今天这个领域。它始于 20 世纪 80 年代 data warehousing 的出现,data warehousing 为组织和分析 business data 创建了基础框架。计算机科学家 Bill Inmon 在 20 世纪 80 年代和 90 年代持续发表相关成果,他被广泛认为为 data warehousing 提供了第一个坚实的理论基础。

随后的一波发展来自 Ralph Kimball。Kimball 是 data warehousing 和 business intelligence(BI)领域的另一位重要贡献者,他在 1996 年出版了具有影响力的著作 The Data Warehouse Toolkit。Kimball 的工作为 dimensional modeling 奠定了基础,标志着 analytics 演进中的另一个关键里程碑。Inmon 和 Kimball 在 20 世纪后期的贡献,共同在塑造 data warehousing 和 analytics 格局方面发挥了关键作用。

进入 21 世纪初,Google 和 Amazon 等科技巨头的崛起,带来了处理海量数据的更高级解决方案需求,进而推动了 Google File System 和 Apache Hadoop 的发布。这标志着 Big Data Engineering 时代的到来,在这个时代,专业人员使用 Hadoop framework 处理大规模数据。

AWS 等 public cloud providers 的兴起,彻底改变了 software 和 data applications 的开发与部署方式。AWS 的开创性产品之一是 Amazon Redshift,它于 2012 年推出。Redshift 代表了一种有趣的组合:online analytical processing(OLAP)与传统数据库技术的融合。在早期,Redshift 需要 database administrators 管理 vacuuming 和 scaling 等任务,以保持最佳性能。

随着时间推移,cloud native technologies 持续演进,Redshift 本身也经历了重大增强。在保留核心优势的同时,新版本 Redshift,以及 Google BigQuery 和 Snowflake 等 cloud native platforms,已经简化了许多行政管理任务,并向各种规模的企业提供高级 data processing capabilities。这一演进凸显了 cloud data processing ecosystem 内部持续不断的创新。

Modern data stack 由 Apache Airflow、data build tool(dbt)和 Looker 等工具组成,它进一步改变了 data workflows。随着这些进步,“Big Data engineer” 这一术语逐渐过时,为 data engineer 这个更广泛、更包容的角色让路。这种转变在 Maxime Beauchemin 的有影响力文章中得到了体现。Maxime Beauchemin 是 Apache Superset 和 Airflow 的创建者,也是 Facebook 和 Airbnb 最早的数据工程师之一。他在文章 “The Rise of the Data Engineer” 中强调了 data engineering 在行业中日益增长的重要性。数据领域的所有这些快速发展,都让 data professionals 的角色发生了重大变化。随着 data tools 的出现,简单任务正在变成战略性任务。

今天的 data engineers 承担多方面职责,包括 data modeling、quality assurance、security、data management、architectural design 和 orchestration。他们越来越多地采用 software engineering practices 和 concepts,例如 functional data engineering 和 declarative programming,以改进 workflows。虽然 Python 和 structured query language(SQL)是 data engineers 不可或缺的语言,但需要注意的是,该领域对编程语言的选择差异很大。Engineers 可能会根据项目的具体需求和偏好,使用 Java(常用于管理 Apache Spark 和 Beam)、Scala(也广泛用于 Spark 和 Beam ecosystem)、Go 等其他语言。在大型组织中,Java 和 SQL 的组合也很常见。

组织正越来越多地走向 decentralized data teams、self-service platforms 和 alternative data storage options。随着 data engineers 被迫适应这些市场变化,我们经常看到一些人承担更技术化的角色,专注于 platform enablement。另一些 data engineers 则更贴近业务,设计、实现并维护系统,把 raw data 转化为 high-value information。他们正在适应这个每天都有新工具进入市场的高速行业,而这个行业也催生了 analytics engineering 这个精彩世界。

在本章中,我们将介绍 analytics engineering 领域,以及它在 data-driven decision-making process 中的作用。我们会讨论 analytics engineering 在今天 data-driven 世界中的重要性,以及 analytics engineer 的主要职责。此外,我们将探索 analytics engineering lifecycle 如何用于管理 analytics process,以及它如何确保生成的数据和洞察具备质量与准确性。我们还将讨论塑造 analytics engineering 领域的当前趋势和技术,从历史到当下,涉及 data mesh 等新兴概念,并讨论 extract, load, and transform(ELT)与 extract, transform, and load(ETL)策略之间的基础选择,以及全球正在采用的多种 data modeling techniques。

Databases and Their Impact on Analytics Engineering

长期以来,data 越来越成为企业关注的焦点。企业希望保持领先于竞争对手、改进内部流程,或者仅仅是理解客户行为。随着新工具、新工作方式,以及 data science 和 BI 等新知识领域的出现,如今的数据格局变得越来越难以完整观察和理解。

技术的自然发展带来了 data analysis、visualization 和 storage tools 的过度供给,每种工具都提供独特功能和能力。然而,这些工具的快速部署也造成了碎片化格局,要求个人和组织既要跟上最新技术发展,又要谨慎选择如何使用它们。有时,这种丰富性会造成困惑,并要求持续学习和适应。

工作实践的演进伴随着工具的多样化。Dynamic 和 Agile methodologies 已经取代了传统的数据管理与分析方法。Iterative practices 和 cross-functional collaboration 为 data projects 引入了灵活性和速度,但也对不同 teams 和 roles 之间 workflows 的协调提出了挑战。随着 data process 的不同方面汇聚在一起,有效沟通和对齐变得至关重要,也形成了对这些新工作实践进行综合理解的需求。

Data science 和 BI 等专门领域也增加了 data field 的复杂性。Data scientists 使用 advanced statistical 和 machine learning techniques 来检测复杂 patterns,而 BI experts 从 raw data 中提取有价值的信息,以产生 practical insights。这些专门领域引入了更精细的技术,需要定期技能发展和学习。成功采用这些实践,需要持续投入教育,并以灵活方式获取技能。

随着 data 在数字领域中扩散,它带来了前所未有的 volume、variety 和 velocity。Data 洪流,以及当代 data sources 的复杂特征,例如 Internet of Things(IoT)gadgets 和 unorganized text,让 data management 变得更加困难。数据的整合、转换和准确性评估等细节变得更加明显,也突出了对强大方法的需求,以保证可靠且精确的 insights。

Data world 的多面性进一步加剧了它的复杂性。由于 computer science、statistics 和 field-specific proficiency 等多个领域的技能汇聚在一起,因此需要一种合作和沟通导向的策略。这种 multidisciplinary interaction 强调了高效 teamwork 和 knowledge sharing 的重要性。

但情况并不总是如此。几十年来,spreadsheets 一直是各个层级用于 storing、managing 和 analyzing data 的标准技术,既用于 business operational management,也用于理解业务的 analytics。然而,随着企业变得更加复杂,data-related decision making 的需求也随之增加。第一个重大转变以 databases 这场革命的形式出现。Databases 可以定义为 structured information 或 data 的有组织集合,通常以电子方式存储在 computer system 中。这些 data 可以是 text、numbers、images 或其他类型的 digital information。Data 会以方便 access 和 retrieval 的方式存储,并遵循一组预定义 rules 和 structures,也就是 schema。

Databases 是 analytics 的重要组成部分,因为它们提供了一种高效存储、组织和检索大量数据的方式,使 analysts 可以轻松访问他们执行复杂分析所需的数据,从而获得原本很难或不可能得到的 insights。此外,databases 可以配置为确保 data integrity,保证被分析的数据准确且一致,从而让 analysis 更可靠、更可信。

Databases 用于 analytics 的最常见方式之一是 data warehousing technique,也就是构建并使用 data warehouse。Data warehouse 是一个大型、集中式 data store,旨在简化数据使用。Data warehouse 中的数据通常从多种 sources 中提取,例如 transactional systems、external data feeds 和其他 databases。随后,这些 data 会被 cleansed、transformed,并集成到一个 single、consistent data model 中,该 model 通常遵循 dimensional modeling technique,例如 star schema 或 Data Vault。

Databases 在 analytics 中的另一个重要用途是 data mining。Data mining 使用 statistical 和 machine learning techniques,在 large datasets 中发现 patterns 和 relationships。通过这种方式,可以识别 trends、预测 future behavior,并进行其他类型的预测。

因此,database technologies 和 data scientists 在 data science 兴起过程中发挥了关键作用:它们提供了一种高效存储、组织和检索大量数据的方式,使 data scientists 能够处理 large datasets,并专注于真正重要的事情:从 data 中获得 knowledge。

SQL 以及 Python 或 Scala 等其他能够与 databases 交互的 programming languages,使 data scientists 能够执行复杂的数据查询和操作。此外,Tableau 和 Microsoft Power BI 等 data visualization tools 可以轻松与 database engines 集成,使 data scientists 更容易以清晰直观的方式展示发现。

随着 Big Data 的出现,以及对存储和处理庞大 datasets 的需求不断增长,各种 database technologies 应运而生,以满足不同需求。例如,data analysts 经常依赖 databases 进行广泛应用,包括 data warehousing、data mining,以及与 Tableau 等 BI tools 集成。

然而,深入理解这些 use cases 很重要,因为这有助于理解 analytics engineering 的必要性。当 BI tools 直接连接到 operational databases,也就是 online transaction processing(OLTP)replicas 时,performance 和 scalability 可能受到限制。对于较小 datasets 和简单 queries,这种方式可能运行良好;但随着 data volumes 增长和 analytics complexity 提高,它可能导致 performance bottlenecks 和 suboptimal query response times。

这正是 analytics engineering 发挥作用的地方。Analytics engineers 是优化 data workflows 的专家,他们 transform 和 aggregate data,确保 data 以适合 analytical tasks 的格式存在。他们设计并维护 data pipelines,将来自各种 sources 的 ETL data 加载到 optimized data warehouses 或 data lakes 中。这样,他们帮助组织克服直接连接 OLTP 的限制,使 Tableau 等工具能够进行更快、更高效的数据分析。本质上,analytics engineering 架起了 raw data 与 actionable insights 之间的桥梁,确保 data analysts 和 scientists 能有效处理 large、complex datasets。

Cloud Computing and Its Impact on Analytics Engineering

近几十年来,世界面对了一系列复杂挑战,并伴随着重要的技术影响。经济衰退推动了 financial technologies 和 risk management systems 的创新。地缘政治紧张局势要求 cybersecurity 不断进步,以保护 critical infrastructure 和 sensitive data。全球健康危机凸显了 advanced data analytics 和 predictive modeling 对 disease surveillance 和 management 的重要性。此外,应对 climate change 的紧迫需求推动了 cutting-edge renewable energy technologies 和 sustainable engineering solutions 的发展,以满足气候目标。

在这些挑战之中,追求 profit 和 growth 仍然是全球企业的重要驱动力。然而,human labor time 的价值获得了新的维度,这导致企业运营方式以及 cloud computing 如何承载这些需求都发生了重大变化。这种变化体现在 managed 和 serverless offerings 的采用越来越多,它们降低了对 database administrators 等 full-time support staff 的依赖。

随着企业适应这种变化中的格局,business models 和 strategies 的 innovation、differentiation 和 sustainability,已经成为企业在快速变化世界中获得成功的关键考量。在这种背景下,information technology 和 systems industry 发现了一个很好的机会,可以扩展自身能力,帮助组织应对这个充满不确定性和压力的世界。Operating models 的 rationalization 已经变得紧迫,需要重新评估 data centers 和 pricing structures。此外,product 和 service offerings 必须主要关注 ease of use、lower latency、improved security、更广泛的 real-time tools、更多 integration、更多 intelligence、更少 code,以及更快 time to market。

组织已经认识到,投资 innovative tools、推动 digital transformation,并采用 data-centric approach 进行决策,对于获得更高 agility 和 competitive advantage 至关重要。为了实现这些目标,许多组织正在重点利用来自 internal 和 external sources 的 well-curated data。这些经过仔细组织的数据可以为 business performance 提供有价值的 insights。

在行业中,以 accessible format 创建、可视化和分析 interconnected business data 的实践,通常被称为 data analytics。历史上,它也被称为 business intelligence,这两个术语紧密相关。虽然 BI 是 analytics 的一个子集,并聚焦于 business-oriented decision making,但 data analytics 涵盖更广范围,包括 product analytics、operational analytics 和其他若干专门领域。BI 和 data analytics 都在帮助组织通过 data-driven insights 获得竞争优势方面发挥关键作用。

尽管 data analytics 对改进和重塑 business strategies、监控 performance 有很多好处,但它也需要在 servers、software licenses,以及 data engineers、data scientists 和 data visualization specialists 等专门 staff 上投入大量资金。在经济危机时期,与 IT hardware、software 和 specialists 相关的高 upfront 和 operational costs,可能被视为不切实际且缺乏吸引力。

因此,on-premises solutions,也就是在公司自己的 premises 中搭建和管理 data analytics infrastructure,往往会失去吸引力。对于刚接触 analytics 且不熟悉这一概念的新进入者来说尤其如此。On-premises solutions 通常需要在 hardware、software 和 ongoing maintenance 上进行大量投资。与 cloud-based data analytics solutions 相比,它们也更不灵活、不易扩展。这种偏好的变化正在为新的 cloud-based data analytics solutions 扫清道路,这些解决方案满足与传统 data analytics 类似的业务需求。但它们不是依赖 on-premises servers 和 software,而是利用 cloud computing services 加速部署,并最大限度降低 infrastructure costs。

Cloud computing 在各行业中的采用不断增加,推动 Microsoft、Google 和 Amazon 等 software vendors 开发 advanced tools,用于 data analysis 和 data warehousing。这些工具被设计为在 cloud computing paradigm 中运行,并利用 shared network resources 来实现更高 accessibility 和 streamlined deployment。Microsoft 的综合 data analytics platform,也就是 Microsoft Fabric,就是这一趋势的生动例子。

与此同时,本书后续会更详细讨论的 dbt Labs 的 dbt,是一个多功能 hybrid product。dbt 与 Hadoop 一样,是 open source solution,使 users 可以根据自身具体需求灵活部署,无论是在 cloud 还是 on premises。在其 cloud version 中,dbt 能够与领先 cloud platforms 无缝集成,包括 Microsoft Azure、Google Cloud Platform(GCP)和 AWS。这种 open source 特性赋予组织根据自身独特 requirements 和 infrastructure preferences 定制部署的能力。

虽然 cloud-based data analytics solutions 和 platforms 是全球趋势,也是 modern data platform 的核心概念,但必须认识到 cloud computing solutions 同时带来 benefits 和 risks,不能忽视。这些 risks 包括潜在 security issues、servers 的 physical location,以及脱离某一 provider 所关联的成本。

尽管如此,cloud technologies 目前正在改变组织部署和构建 information systems 与 technology solutions 的方式,data analytics 也不例外。因此,必须认识到,moving to the cloud 很快将不再是一个选项,而是必要条件。理解以 services 形式提供的 analytics solutions 的 benefits 很重要。否则,如果这个转型没有得到解决,使用缺乏 flexibility 和 scalability 的 on-premises solutions 向 decision-makers 提供及时信息,将变得越来越困难。

然而,尽管 cloud technologies 带来 economies of scale 和 flexibility 等诸多 benefits,它们也带来 information security issues。Data 集中在 cloud infrastructures 中,使其成为 unauthorized attacks 的诱人目标。若想在 data context 中成功使用 cloud,组织必须理解并缓解 cloud computing 相关 risks。关键 risks 包括 data privacy、loss of control、incomplete or insecure deletion of data、unauthorized internal access、data availability 和 complex costing。

Data privacy 是一个重要 concern,因为即使 vendors 的 public audit reports 可以帮助建立 trust,也很难验证 vendors 是否在按照 laws 和 standards 处理 data。在非集成场景中,随着 data 在不同 systems 和 data centers 之间流动,data security risks 会成倍增加,从而提高 interception 和 synchronization 风险。另一个重要风险是 vendor dependency,它发生在 data management responsibility 只掌握在单一 service provider 手中,以至于限制迁移到其他 solutions 的能力。这种 dependency 最终会限制组织对 decision making 的 control,以及对 data 的 authority。虽然这些只是一些已知 risks,但我们已经可以理解:组织需要掌握这些 risks,才能有效获得 cloud-based data analytics solutions 的 benefits。这要求仔细考虑、遵守 security standards 和 best practices,并持续进行 cost control,以衡量 return on investment。

如果所有 risks 都在合适的 data strategy 中得到正确处理和缓解,而该 strategy 描述了组织如何管理其 information assets,包括 cloud strategy、technology、processes、people 和 rules,那么与没有 data strategy 的组织相比,该组织可以获得显著 competitive advantage。通过聚焦 cloud computing 并利用 cloud data platform,组织可以将 raw data 转化为 meaningful insights,加速构建坚实 data foundation 的过程。这使相关 data 的 sourcing、structuring 和 analysis 更高效,甚至支持 AI technologies 的采用,同时相比传统方法以更少时间和更低成本创造价值。

有趣的是,cloud data platform、analytics 和 AI 之间的关系是 symbiotic。实施 cloud data platform 会加速 analytics-driven architecture 的采用,并支持 AI initiatives 的全面 operationalization。它使组织能够使用所有相关 data,获得 enterprise-wide insights,并解锁新的 business opportunities。通过消除管理多个 tools 的需求,组织可以专注于 data modernization,加速 insight discovery,并受益于现有 technology partnerships,从而推进其 AI journey。

因此可以说,cloud computing 是 modern data platforms 以及 cloud-based analytics 和 AI platforms 的核心组成部分。这些平台每天都在持续增长,并由此推动该行业发生 disruption。

The Data Analytics Lifecycle

Data analytics lifecycle 是一系列步骤,用于将 raw data 转换为有价值且易于消费的 data products。这些 data products 可以从 well-managed datasets,到 dashboards、reports、APIs,甚至 web applications。换句话说,它描述了 data 如何被创建、收集、处理、使用和分析,以达成特定 product 或 business goal。

组织动态复杂度的增加,会直接影响 data 的处理方式。许多人必须使用同一份 data,但目标各不相同。Top executive 可能只需要了解少数 top-level key performance indicators,以跟踪 business performance;而 middle manager 可能需要更 granular 的 report 来支持 daily decisions。

这凸显了基于同一 data foundation 创建和维护 data products 时,必须采用 governed 和 standardized approach。鉴于组织必须围绕 data governance、technologies 和 management processes 做出许多决策,遵循结构化方法是记录并持续更新组织 data strategy 的基础。

因此,data analytics lifecycle 是理解和映射创建与维护 analytics solution 所涉及 phases 和 processes 的重要 framework(图 1-1)。它是 data science 和 analytics 中的重要概念,为管理创建有效 analytics solution 所需的 various tasks 和 activities 提供结构化方法。

image.png

图 1-1:Data analytics lifecycle

Data analytics lifecycle 通常包括以下阶段。

Problem definition

Analytics cycle 的第一阶段是理解需要解决的问题。这包括识别 business objectives、available data,以及解决问题所需的 resources。

Data modeling

在识别 business requirements 并完成 data sources assessment 之后,你可以根据最适合自身需求的 modeling technique 开始对 data 建模。你可以选择 diamond strategy、star schema、Data Vault,甚至 fully denormalized technique。所有这些概念都会在第 2 章讨论。

Data ingestion and transformation

下一阶段是 ingest 并准备来自 source systems 的 data,使其匹配已创建的 models。根据整体 information architecture,你可以选择 schema-on-write strategy,即投入更多精力将 raw data 直接转换成你的 models;也可以选择 schema-on-read strategy,即以最少 transformations ingest 和 store data,并将 heavy transformations 移到 data platform 的 downstream layers。

Data storage and structuring

一旦 data pipelines 被设计并可能已经 implemented,你需要决定使用哪些 file formats:简单的 Apache Parquet,或更高级的 Delta Lake、Apache Iceberg 等格式;同时也要决定 partitioning strategies 和 storage components:例如 Amazon Simple Storage Service(S3)这样的 cloud-based object store,或 Redshift、BigQuery、Snowflake 这类更接近 data warehouse 的平台。

Data visualization and analysis

一旦 data 可用,下一步就是探索它、可视化它,或创建 dashboards,以直接支持 decision making 或支持 business process monitoring。这个阶段高度 business oriented,应与 business stakeholders 紧密协作创建。

Data quality monitoring, testing, and documentation

虽然 data quality 被图示为 analytics lifecycle 的最后阶段,但 data quality 应该是 end-to-end concern,并且应在整个 flow 中通过 design 来保证。这包括实施所有 quality controls,确保 stakeholders 可以信任暴露出来的 data models;记录所有 transformations 和 semantic meanings;并随着 data 持续流动,确保 pipelines 中进行适当 testing。

NOTE

借助 dbt,这些 components 中的多个部分可以更容易、更高效地部署,因为它允许我们并行构建它们,并贯穿整个 lifecycle。Documentation、testing 和 quality 会成为并行执行的常见任务。第 4 章会对此做详细阐述。

Analytics lifecycle 是一个关键概念,使组织能够以结构化和一致方式处理 data engineering、science 和 analytics processes。通过遵循结构化过程,组织可以确保自己解决的是正确问题、使用的是正确数据,并构建 accurate 和 reliable 的 data products,最终带来更好的 decision making 和更好的 business results。

The New Role of Analytics Engineer

正如前面章节所述,data scientists 和 analysts 现在可以轻松访问他们执行复杂分析所需的数据,并获得原本很难或不可能获得的 insights。然而,随着存储和分析的数据量持续增长,组织越来越需要 data specialists 来帮助管理这些 data,并提供所需 infrastructure。

最近出现的 specialized data engineers 分支,被称为 analytics engineers。他们在开发和维护 databases 与 data pipelines 中发挥重要作用,使 data scientists 和 analysts 能专注于更高级的 analytics tasks。Analytics engineers 负责设计、构建和维护 data architecture,使组织能够将 data 转化为 valuable insights,并做出 data-driven decisions。

此外,从传统 ETL processes 及其 enforced schemas-on-write 转向 schema-on-read 的 ELT approach,意味着 data 现在会先进入 data repositories,然后再被 transformed。这为 super-technical analysts 提供了机会:他们既非常了解业务,又具备将 raw data 建模为 clean、well-defined datasets 的技术能力——这正是 analytics engineers。如果在 data warehouses 和 ETL paradigm 的世界中寻找这类技能,就需要同时具备 software engineering 和 data analytics 技能的 specialists,而这种人更难找到。

Analytics engineer 是 data platform engineers 与 data analysts 之间的桥梁。Data platform engineers 专注于构建支撑 data platforms 的 technical infrastructure,而 data analysts 专注于将 data 转换成有洞察力的 data products。Analytics engineer 的工作,是创建 well-tested、up-to-date 和 documented datasets,使组织其他成员能够用它们回答自己的问题。他们在技术上足够熟练,能够应用 version control 和 continuous integration / continuous deployment(CI/CD)等 software development best practices,同时也需要能够与 stakeholders 有效沟通。

我们可以借用 civil engineering 的类比:data platform engineers 是 analytics project 的 foundation,负责确保 infrastructure 强健,包括 plumbing、electrical systems 和 structural foundation。他们为接下来的一切打下基础。

Analytics engineers 可以类比为 architects。他们在 data engineers 创建的坚实基础上,设计与 business model 对齐的结构,构建从优秀 dashboards 到有价值 data models 的各种内容。他们弥合 technical infrastructure 与 business objectives 之间的 gap。

在这个类比中,data analysts 就像 interior designers。他们走进已经建好的 buildings,不仅确保内容与 users 对齐,也让内容 user-friendly,并根据 data consumers 的具体需求进行定制。这些角色共同协作,创建 holistic 且 functional 的 analytics environment。

从 data analytics lifecycle 来看,data platform engineers 构建 platforms,并将 raw data ingest 到 enterprise-wide data stores。另一方面,analytics engineers 接收 raw data,并将其 transform 成 business 为支持 decision making 所需的 analytical data models。

Responsibilities of an Analytics Engineer

随着 data volume 和 complexity,以及 data 的多样化应用持续增长,analytics engineer 的角色变得越来越重要。这涵盖从设计和实现 data storage and retrieval systems,到创建和维护 data pipelines,再到开发和部署 machine learning models 的所有内容。在这个动态环境中,analytics engineers 在利用不断增长的数据资源,并在广泛应用中最大化其价值方面发挥关键作用。

根据最新 role trends,主要职责之一是设计和实现高效的 data storage and retrieval systems。这包括与 databases 和 data warehousing technologies 合作,设计能够处理 large 和 complex datasets 的 data models 和 structures。另一个直接职责是创建和维护 data pipelines,从各种 sources extract data、transform data,并将 data load 到 central repository 中进行 analysis。

对大多数 analytics engineers 来说,machine learning models 的开发和使用不那么显性,但仍然在发生。这包括与 data scientists 合作,理解他们的 requirements,选择和实现合适 algorithms,并确保 models 使用正确的 training 和 testing data 集合完成 proper training 和 deployment。如果并非如此,analytics engineers 会参与构建合适的 data pipelines,以持续向 data scientists 提供合适的 training 和 testing data。

此外,analytics engineers 还负责监控和维护 machine learning models 的 performance,包括帮助组织 offline evaluation,并将 model-specific metrics 与 business metrics 结合起来,用于 online monitoring。

Analytics engineer 通常熟练掌握 Python、R、SQL 和 Spark 等 programming languages 和 tools,以实现 data pipelines、data models 和 machine learning models。他们也应该熟悉 AWS、GCP 或 Azure 等 cloud computing platforms,以部署和扩展 solutions。

观察多个公司中 analytics engineers 的职责,可以包括以下内容:

  • 设计并实现 data storage and retrieval systems,例如 databases 和 data warehouses,使其能够处理 large 和 complex datasets。创建和维护 data pipelines,从各种 sources extract、transform 和 load data 到 central repository 中进行 analysis。
  • 通过执行 data quality checks、跟踪 data flows,并实施 data security measures,确保 data accurate、complete、consistent 和 accessible。
  • 利用 AWS、GCP 或 Azure 等 cloud computing platforms 部署和扩展 analytics solutions,同时关注 data infrastructure 的 scalability、security 和 cost optimization。
  • 优化 data storage and retrieval systems、data pipelines 和 machine learning models 的 performance,确保它们能够处理 data volume 和 complexity。
  • 使用 Python、R、SQL 和 Spark 等 programming languages 和 tools,实现 data pipelines、data models 和 machine learning models。
  • 与 data scientists 协作,理解他们的 requirements,选择并实现合适 algorithms,确保 machine learning models properly trained 和 deployed。监控和维护 machine learning models 的 performance,并在需要时 troubleshooting 和 optimization。
  • 跟上 data engineering、machine learning 和 analytics 的最新 technologies 与 trends,并持续寻找机会改进组织的 data infrastructure 和 analytics capabilities。

Analyst 的角色很宽泛,需要结合 technical skills、problem-solving skills,以及对 business needs 的理解。Analytics engineers 必须能够适应 data science 的技术和业务两个方面,并能够弥合 data scientists 与 IT 之间的 gap。

Enabling Analytics in a Data Mesh

Data mesh 是一个现代 framework,用于描述组织的 data strategy。它使 business domain teams 能够拥有自己的 data,以及提供 data access 的 services,而不是只依赖 central data team。它将 monolithic data architecture 分解为一组 independent、autonomous data services,从而支持更细粒度的 scaling、更高 autonomy 和更好的 data management。它为处理不同类型 data 提供更高 flexibility,并支持 experimentation、innovation 和 collaboration 的文化。有了 data mesh,企业应能更快行动,并更迅速地响应变化中的 business needs。

Data mesh methodology 作为一种 architectural pattern 的出现,已经彻底改变了 analysts 与 data infrastructure 交互的方式。通过将 monolithic data architecture 分解为一系列 independent、autonomous data services,并使这些 services 可以独立 developed、deployed 和 operated,teams 能够以更细粒度、更轻松的方式解决 data architecture 的 scalability、manageability 和 autonomy 挑战。

借助这种新方法,teams 可以更细粒度地扩展 data infrastructure,降低 data silos 和 duplication 的风险。每个 business domain team 也拥有更高 autonomy,可以为自身具体需求选择最合适的 tools 和 technologies,同时利用 centrally offered services 来管理整个 data lifecycle。这使他们能够更快行动、更敏捷,并快速响应变化中的 business needs。此外,data mesh approach 为处理 structured、semi-structured 和 unstructured data 等不同类型 data 提供了更高 flexibility。它还通过打散 monolithic data architecture,并实现 data services 的清晰映射,支持更好的 data governance practices。

Analytics engineer 可以在 data mesh organization 中创造价值,方式是专注于构建和维护 independent、autonomous data services,以支持多个 teams 和 applications 的需求,例如 shared data models,并通过良好治理和文档化,确保 effortless data discoverability、accessibility 和 security。

在 data mesh 中工作的另一个重要方面,是确保 data governance 和 security。这可能包括实施 data policies 和 procedures,例如 data access controls、data sequencing 和 data quality checks,以确保 data secure 且 high quality。此外,analytics engineers 应与 data owners 和 stakeholders 协作,理解并遵守所有 data storage 和 management regulatory requirements。

在 data mesh 中工作,需要与传统 monolithic data architectures 不同的 mindset。Analytics engineers 必须摆脱 data 是 centralized resource 的观念,并将其视为 distributed autonomous services,供不同 teams 使用。

Data Products

另一个我们一直在使用且需要定义的重要概念是 data product。Data products 是可访问的 applications,提供对 data-driven insights 的访问,以支持 business decision-making processes,甚至自动化这些流程。它们内部可能包含用于 retrieving、transforming、analyzing 和 interpreting data 的 components。另一个重要方面是,data products 应该以其他 internal 或 external applications 或 services 可以访问和使用的方式暴露其 data。

Data products 的一些示例如下:

  • 一个 REST API,允许 users 查询特定 business data model
  • 一个 data pipeline,从各种 sources ingest 和 process data
  • 一个 data lake,存储并管理大量 structured 和 unstructured data
  • 一个 data visualization tool,帮助 users 理解并传达 data insights

Data products 也可以由 microservices 组成。这些是小型、独立且聚焦的 services,可以独立 developed、deployed 和 scaled。它们可以通过 API 访问,并在 enterprise 内复用。

dbt as a Data Mesh Enabler

dbt 是一个 open source tool,帮助 data engineers、analytics engineers 和 data analysts 构建 data mesh,它提供了一种创建、测试和管理 data services 的方式。它允许 teams 定义、测试和构建 data models,并为这些 models 创建清晰且 well-defined interface,使其他 teams 和 applications 可以轻松使用它们。

支持创建 data mesh 的 dbt features 包括以下内容。

Data modeling capabilities

Data modeling capabilities 允许 teams 使用简单且熟悉的 SQL-based syntax 定义 data models,使 data engineers 和 data analysts 可以轻松一起定义和测试 data models。

Data testing capabilities

dbt 提供 testing framework,使 teams 可以测试 data models,并确保它们 accurate 和 reliable。这有助于在 development process 早期识别 errors,并确保 data services 具有高质量。

Data documentation

dbt 支持 data models 和 services 文档化,使其能够被其他 teams 和 applications 轻松理解和使用。

Data tracking capabilities

Data tracking capabilities 允许 teams 跟踪 data models 的 origin。这让人们可以轻松理解 data 如何被使用,以及它来自哪里。

Data governance capabilities

Data governance capabilities 使 enforce data governance policies 成为可能,例如 data access controls、data lineage 和 data quality checks,这有助于确保 data secure 且 high quality。

虽然 analytics engineering 的主要重点是设计和实现 data models,但需要注意的是,data tracking 和 governance capabilities 可以显著增强 analytics engineering processes 的有效性。在 data models 需要追踪 data origin 并遵守严格 data governance policies 的场景中,这些能力尤其有价值。采用此类 practices 和 governance models,包括 data mesh,可能会因 data environment 的具体需求和复杂性而异。许多成功的 dbt deployments 从较简单的 single-star schema data models 开始,并可能随着 data needs 演进,探索 data mesh 等高级概念。

The Heart of Analytics Engineering

Data transformation 将 data 从一种 format 或 structure 转换为另一种,使其更有用,或更适合某个特定 application 或 purpose。这个过程是必要的,因为它使组织能够将 raw、unstructured data 转化为 valuable insights,从而影响 business decisions、改进 operations,并推动 growth。

Data transformation 是 analytics lifecycle 中的关键步骤。组织必须具备 tools 和 technology,才能高效且有效地完成这一任务。Data transformation 的一些示例包括 cleaning 和 preparing data、aggregating 和 summarizing data,以及用 additional information enrich data。dbt 被广泛用于 data transformation,因为它允许组织快速、轻松地执行复杂 data transformation tasks,并且可以与 Airflow 等其他 tools 集成,实现 end-to-end data pipeline management。

dbt 是 analysts 和 enterprise stakeholders 的 gemba。对 businesses 和 stakeholders 来说,价值产生于 data 被 transformed 并以易用形式 delivered 的时候。

TIP

Gemba 是一个日语词,意思是 “the real place”。在企业语境中,gemba 指价值被创造的地方。

在 ETL strategy 中,data transformation 通常发生在 data 被 loaded 到 target system 之前,例如 data warehouse 或 data lake。Data 从各种 sources 被 extracted,transformed 以匹配 target system 的 structure 和 format,然后 loaded 到 target system 中。这个过程确保 data 在 systems 和 applications 之间 consistent 且 usable。

相比之下,ELT strategy 代表一种更新且更灵活的 data processing approach。在这种 strategy 中,data 首先被 extracted 并 loaded 到 target system,然后才进行 transformation。ELT 有几个优势,包括更高 flexibility,以及能够支持比传统 ETL paradigm 更广泛的数据应用。一个重要好处是,它能够直接在 target system 内适配各种 data transformations 和 real-time insights。这种 flexibility 使组织能够更快从 data 中获得 actionable insights,并适应不断变化的 analytical needs。

然而,也必须承认 ELT 可能带来更高 storage 和 ingestion costs,因为 raw 或 minimally transformed data 会被存储。许多企业认为这些成本是合理的,因为 ELT 为 operations 带来了巨大价值,尤其是 flexibility。因此,ELT 越来越受欢迎,尤其是在 cloud-based data warehousing solutions 出现,以及其提供的 data transformation 和 processing capabilities 改进之后。

无论使用哪种 strategy,如果没有适当的 data cleaning、transformation 和 standardization,data 最终可能 inaccurate、incomplete 或难以使用,从而导致糟糕 decision making。

The Legacy Processes

传统上,legacy ETL processes 往往复杂、耗时,并且需要专门技能来开发、实现和维护。它们通常也需要大量 manual coding 和 data manipulation,因此容易出错,也难以扩展。

此外,这些 processes 往往不灵活,无法适应变化中的 business needs 或新的 data sources。随着 data volume、variety 和 velocity 持续增长,legacy ETL processes 正变得越来越不足,因此正在被更现代、更灵活的 approaches,例如 ELT 所取代。

过去,ETL 通常使用 custom scripts 或 specialized visual-based ETL tools 来执行。这些 scripts 或 tools 从各种 sources 提取 data,例如 flat files 或 databases,对 data 执行必要 transformations,然后将 data loaded 到 target system,例如 data warehouse。

一个 legacy ETL process 的示例,是使用 SQL scripts 和 Java 或 C# 等 programming languages 的组合,从 relational database 中 extract data,使用 programming language transform data,然后将 transformed data loaded 到 data warehouse。另一个示例是使用 Oracle Data Integrator 或 IBM InfoSphere DataStage 等 specialized ETL tools,在 systems 之间 extract、transform 和 load data。这些 legacy ETL processes 可能复杂、难以维护和扩展,并且通常需要 dedicated team of developers。

Using SQL and Stored Procedures for ETL / ELT

过去,一些特定 data platforms 使用 relational database management system(RDBMS)中的 stored procedures 来实现 ETL,例如 SQL Server 或 Oracle。Stored procedures 是 prepared SQL code,你可以将其存储在 database engine 中,以便重复使用。根据它是 data inflow 还是 outflow,scripts 会在 source 或 target database 中执行。

假设你想创建一个简单 stored procedure,从一个 table extract data,transform data,并将其 loaded 到另一个 table,如 Example 1-1 所示。

Example 1-1:SQL procedure to extract data

CREATE PROCEDURE etl_example AS
BEGIN
    -- Extract data from the source table
    SELECT * INTO #temp_table FROM source_table;

    -- Transform data
    UPDATE #temp_table
    SET column1 = UPPER(column1),
        column2 = column2 * 2;

    -- Load data into the target table
    INSERT INTO target_table
    SELECT * FROM #temp_table;
END

这个 stored procedure 首先使用 SELECT INTO statement,从 source table 中 extract 所有 data,并将其存储到 temporary table(#temp_table)中。然后,它使用 UPDATE statement,将 column1 的 values 改为 uppercase,并将 column2 的 value 加倍。最后,stored procedure 使用 INSERT INTO statement,将 data 从 #temp_table loaded 到 target_table 中。

NOTE

如果你不熟悉 SQL syntax,不用担心。第 3 章会完整介绍使用 SQL 的基础。

需要注意的是,这是一个非常基础的示例;实际 ETL processes 通常复杂得多,并包含更多步骤,例如 data validation、处理 null values 和 errors,以及记录 process results。

虽然可以使用 stored procedures 来实现 ETL processes,但必须注意,这样做可能带来一些影响,例如需要专门 knowledge 和 expertise 来编写和维护这些 procedures,并且缺乏 flexibility 和 scalability。此外,使用 stored procedures 实现 ETL,可能会让与其他 systems 和 technologies 的集成变得困难,也会让排查 ETL process 中出现的问题更困难。

Using ETL Tools

如前所述,ETL tools 是 software applications,通过提供 visual interface、software development kit(SDK)或 programming library,配合 prepackaged code 和 artifacts,加速 ingestion 和 transformation pipelines 的构建。这些 code 和 artifacts 可用于从各种 sources extract、transform 和 load data 到 target,例如 data warehouse 或 data lake。许多组织通常使用它们来自动化将 data 从各种 systems 和 databases 迁移到 central data warehouse 或 data lake 的过程,以便进行分析。

Airflow 是一个流行的 open source platform,用于管理和调度 data pipelines。它由 Airbnb 开发,近年来因 flexibility 和 scalability 而广受欢迎。Airflow 允许 users 使用 Python code 定义、调度和监控 data pipelines,使 data engineers 和 scientists 可以轻松创建 pipelines。

Example 1-2 展示了一个简单 Airflow DAG。Directed acyclic graph(DAG)是一个没有 directed cycles 的 directed graph。

Example 1-2:An 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,每小时运行一次。它有两个 tasks:print_datesleep。第一个 task 执行 date command,打印当前日期和时间。第二个 task 执行 sleep 5 command,使 task 暂停五秒。第二个 task 的 retries 设置为 3。因此如果它失败,会重试三次后才放弃。两个 tasks 通过 operator >> 连接。这也意味着 task2 依赖于 task1,只有在 task1 成功完成后才会执行。

Airflow 是调度和管理 ETL pipelines 的高效工具,但它也有一些限制。首先,Airflow 的设置和管理可能非常复杂,尤其是对于大型或复杂 pipelines。其次,它并不是专门为 data transformation 设计的,某些类型的 data manipulation 可能需要额外 tools 或 custom code。

NOTE

dbt 可以通过提供 data transformation 的 best practices 和 conventions,以及一个简单直接的 interface 来执行和管理 data transformation,从而解决这些 Airflow limitations。它也可以与 Airflow 集成,提供完整 ETL / ELT solution,该 solution 容易设置和管理,同时对 data pipelines 提供高度 flexibility 和 control。

The dbt Revolution

dbt 是一个 open source command-line tool,它在 data analytics industry 中越来越受欢迎,因为它简化并流线化了 data transformation 和 modeling 的过程。另一方面,Airflow 是一个强大的 open source platform,用于 programmatically 创建、调度和监控 workflows。当 dbt 与 Airflow 集成时,data pipeline 可以被更高效地管理和自动化。Airflow 可以用于调度 dbt runs,而 dbt 可以用于执行 pipeline 中的 data transformation tasks。

这种集成使 teams 能够管理从 data extraction 到 loading into data warehouse 的整个 data pipeline,确保 data 始终 up-to-date 且 accurate。该集成也让自动化 data pipeline tasks、调度和监控 pipeline,以及在问题出现时 troubleshooting 变得更容易。

为了说明构建一个简单 dbt model 有多简单,想象你想构建一个 model,用于通过汇总每个 order 的 revenue 来计算公司 total revenue。该 model 可以使用 dbt model file 定义,其中指定 calculation 的 SQL code,以及任何 required dependencies 或 parameters。Example 1-3 展示了这个 model file 可能是什么样子。

Example 1-3:A dbt model

{{ config(materialized='table') }}

select
    sum(orders.revenue) as total_revenue
from {{ ref('orders') }} as orders

dbt 的主要优势之一是,analytics engineers 可以用一种简单的 high-level language,为 data transformations 编写 reusable、maintainable 和 testable code,同时消除编写 SQL 的复杂性。这促进了 team 在 data projects 上的协作,并降低 data pipeline 中出错的风险。

dbt 的另一个好处是,它支持更高效的 data pipeline management。通过与 Airflow 等 orchestration tools,以及 Dagster、Prefect 等其他工具,还有 dbt Labs 自己的 dbt Cloud product 集成,dbt 使 teams 能够有效规划、调度和监控 data pipelines。这确保 data 持续保持 up-to-date 和 accurate。dbt 与 Airflow 等 orchestration tools 的协同作用,使 seamless data refresh 和 new logic deployment 成为可能,类似 software engineering 中的 CI/CD practices。这种集成确保随着 new data 可用或 transformations 更新,data pipeline 可以被高效 orchestrated 和 executed,从而交付 reliable 和 timely insights。

总体而言,dbt 正在被希望提升 data analytics capabilities 并 streamlining data pipelines 的组织广泛采用。虽然它仍是一项相对较新的技术,但已被许多公司使用,并被认为是 data professionals 的有价值工具。第 4 章将更深入地介绍 dbt 及其 capabilities 和 features。

Summary

近几十年来,data management 领域经历了深刻变革,从基于 SQL stored procedures 等结构化 data storage 和 access 方法,转向更灵活、更可扩展的 workflows。这些现代 workflows 由 Airflow 和 dbt 等强大工具支撑。Airflow 促进 dynamic orchestration,而 dbt 将 analytics code 提升到 production-grade software 的层级,引入了 data testing 和 transformation 的创新方法。

在这个动态环境中,新的角色不断出现,其中 analytics engineer 位于 data engineering 和 data analytics 的交叉点,确保交付 robust insights。尽管 tools 和 roles 持续演进,data 的内在价值并未改变。然而,data management 正在发展为一门 discipline,它不仅关注 data 本身,也关注使用 data 的 professionals。

即使有这些进步,核心挑战依然存在:获取 critical data、维持最高 data-quality standards、高效存储 data,以及满足 stakeholders 对 data delivery 的期望。Data value chain 的核心,是 data modeling 的重新焕发活力。高效 data modeling 不只是 data gathering;它会组织和结构化 data,使其反映 real-world relationships 和 hierarchies。第 2 章将深入介绍 data modeling 及其在 analytics engineering 中的关键作用。

本章中,我们探索了 data management 的演进、analytics engineer 角色的出现,以及 data mesh、ELT 与 ETL strategies 之间差异等概念。这组多样主题旨在提供 data landscape 的综合概览。