读数据工程之道:设计和构建健壮的数据系统04数据工程生命周期(下)

news2024/11/27 20:30:11

1. 获取

1.1. 在了解数据源、所用源系统的特征以及数据的存储方式之后,你需要收集数据

1.2. 数据工程生命周期的下一阶段是从源系统中获取数据

  • 1.2.1. 源系统和获取代表了数据工程生命周期中最重要的瓶颈

  • 1.2.2. 源系统通常不在你的直接控制范围内,可能会随机变得无响应或提供质量差的数据

  • 1.2.3. 你的数据获取服务可能出于多种原因神秘地停止工作

  • 1.2.4. 不可靠的源和获取系统会在整个数据工程生命周期中产生连锁反应

1.3. 主要问题

  • 1.3.1. 正在获取的数据的用例有哪些?

    • 1.3.1.1. 可以重用这些数据而不是创建同一数据集的多个版本吗?
  • 1.3.2. 系统是否可靠地生成和获取这些数据,这些数据是否在我需要时可用?

  • 1.3.3. 获取后的数据目的地是什么?

  • 1.3.4. 需要多久访问一次数据?

  • 1.3.5. 数据通常以多大的体积到达?

  • 1.3.6. 数据的格式是什么?

    • 1.3.6.1. 下游存储和转换系统可以处理这种格式吗?
  • 1.3.7. 源数据是否处于良好状态以供直接下游使用?

    • 1.3.7.1. 如果是这样,持续多长时间,什么可能导致它无法使用?
  • 1.3.8. 如果数据来自流媒体源,是否需要在到达目的地之前进行转换?

    • 1.3.8.1. 在数据流本身内转换数据的情况下,进行中的转换是否合适?

1.4. 批处理与流处理

  • 1.4.1. 处理的所有数据本质上都是流式传输的

  • 1.4.2. 数据几乎总是在其源头不断地产生和更新

  • 1.4.3. 批量获取只是一种专门且方便的大块处理数据流的方法

  • 1.4.4. 流式获取使我们能够以连续、实时的方式向下游系统提供数据

    • 1.4.4.1. 实时(或接近实时)意味着数据在生成后的很短的时间内(例如,不到1秒后)就可以供下游系统使用

    • 1.4.4.2. 符合实时性要求的延迟因领域和要求而异

    • 1.4.4.3. 流处理似乎是个好主意,但它并不总是直截了当的;额外的成本和复杂性必然会发生

  • 1.4.5. 批量数据在预定的时间间隔或当数据达到预设大小阈值时被获取

    • 1.4.5.1. 批量获取是一扇单向门:一旦数据被分成批次,下游消费者的延迟就会受到固有的限制
  • 1.4.6. 批处理长期以来一直是获取数据的默认方式

    • 1.4.6.1. 批处理仍然是为下游消费提取数据的一种非常流行的方式,特别是在分析和ML中
  • 1.4.7. 许多系统中存储和计算的分离以及事件流和处理平台的普遍存在,使得数据流的连续处理更容易获得并且越来越受欢迎

    • 1.4.7.1. 选择在很大程度上取决于使用情况和对数据实时性的期望
  • 1.4.8. 关键考虑因素

    • 1.4.8.1. 如果我实时获取数据,下游存储系统能否处理数据流的速率?

    • 1.4.8.2. 需要毫秒级的实时数据获取吗?

      1.4.8.2.1. 或者采用微批处理方法,例如每分钟收集和获取数据?

    • 1.4.8.3. 流式获取的用例有哪些?

      1.4.8.3.1. 通过实施流处理,我有哪些具体优势?

      1.4.8.3.2. 如果我实时获取数据,我可以对这些数据采取什么行动来改进批处理?

    • 1.4.8.4. 流处理方法在时间、金钱、维护、停机时间和机会成本方面是否会比简单地进行批处理花费更多?

    • 1.4.8.5. 如果基础设施出现故障,我的流处理管道和系统是否可靠且冗余?

    • 1.4.8.6. 哪些工具最适合用例?

    • 1.4.8.7. 如果我正在部署ML模型,在线预测和可能的持续训练对我有什么好处?

    • 1.4.8.8. 我是从实时生产实例获取数据吗?

      1.4.8.8.1. 如果是这样,我的获取过程对此源系统有何影响?

  • 1.4.9. 许多出色的获取框架确实可以处理批处理和微批处理获取方式

    • 1.4.9.1. 批处理是许多常见用例的绝佳方法,例如模型训练和每周报告

    • 1.4.9.2. 只有在确定了可以权衡使用批处理的业务用例之后,才能采用真正的实时流

1.5. 推送与拉取

  • 1.5.1. 在数据获取的推送模型中,源系统将数据写入目标系统,无论是数据库、对象存储还是文件系统

  • 1.5.2. 在拉取模型中,数据是在源系统中检索

  • 1.5.3. 推送和拉取范式之间的界限可能非常模糊

  • 1.5.4. 数据在数据管道的各个阶段工作时,经常会被推送和拉取

  • 1.5.5. 在传统的ETL中,获取系统按固定的时间表查询当前源表快照

  • 1.5.6. 连续CDC

    • 1.5.6.1. 每当源数据库中的一行发生更改时,一种常用方法都会触发一条消息

    • 1.5.6.2. 这条消息被推送到一个队列中,获取系统在队列中获取它

    • 1.5.6.3. CDC方法使用二进制日志,它记录对数据库的每次提交

      1.5.6.3.1. 获取系统读取日志但不直接与数据库交互

      1.5.6.3.2. 这几乎不会对源数据库增加额外负载

    • 1.5.6.4. 某些版本的批处理CDC使用拉取模式

      1.5.6.4.1. 在基于时间戳的CDC中,获取系统查询源数据库并提取上次更新以来已更改的行

1.6. 通过流式获取,数据绕过后端数据库并直接推送到终端,通常由事件流平台缓冲数据

  • 1.6.1. 此模式对于发射传感器数据的IoT传感器队列很有用

  • 1.6.2. 我们不是依靠数据库来维护当前状态,而是简单地将每个记录的读数视为一个事件

  • 1.6.3. 简化了实时处理,允许应用程序开发人员为下游分析定制消息,并极大地简化了数据工程师的工作

2. 转换

2.1. 数据工程生命周期的下一个阶段是转换,这意味着数据需要从其原始形式转变为对下游用例有用的形式

  • 2.1.1. 如果没有适当的转换,数据将处于惰性状态,并且不会以对报告、分析或ML有用的形式出现

  • 2.1.2. 转换阶段是数据开始为下游用户消费创造价值的阶段

2.2. 在获取后,基本转换立即将数据映射到正确的类型​,将记录放入标准格式,并删除错误的记录

  • 2.2.1. 转换的后期阶段可能会转换数据模式并应用规范化

  • 2.2.2. 在下游,我们可以应用大规模聚合来报告或对ML过程的数据进行特征化

2.3. 主要考虑因素

  • 2.3.1. 转换的成本和投资回报率(Return On Investment,ROI)是多少?

    • 2.3.1.1. 相关的商业价值是什么?
  • 2.3.2. 转换是否尽可能简单和自我隔离?

  • 2.3.3. 转换支持哪些业务规则?

2.4. 可以批量转换数据,也可以在传输过程中进行流式转换

  • 2.4.1. 几乎所有数据都以连续流的形式开始,批处理只是处理数据流的一种特殊方式

  • 2.4.2. 批处理转换非常受欢迎,但鉴于流处理解决方案的日益普及和流数据量的普遍增加,预计流式转换的受欢迎程度将继续增长,也许很快就会在某些领域完全取代批处理

2.5. 转换视为数据工程生命周期的一个独立领域,但生命周期的实际情况在实践中可能要复杂得多

2.6. ML的数据特征化是另一个数据转换过程

  • 2.6.1. 特征化旨在提取和增强对训练ML模型有用的数据特征

  • 2.6.2. 特征化可能是一门暗黑艺术,它结合了领域专业知识(以确定哪些特征可能对预测很重要)与数据科学方面的丰富经验

3. 服务

3.1. 数据工程生命周期的最后阶段

  • 3.1.1. 现在数据已被获取、存储并转换为连贯且有用的结构,是时候从你的数据中获取价值了

  • 3.1.2. 从数据中“获取价值”对不同的用户意味着不同的事情

  • 3.1.3. 数据服务可能是数据工程生命周期中最令人兴奋的部分

3.2. 当数据用于实际目的时,它才有价值

  • 3.2.1. 未使用或未查询的数据只是惰性的

3.3. 数据虚荣项目是公司的一个主要风险

  • 3.3.1. 在数据湖中收集大量数据集,这些数据集从未以任何有用的方式使用过

3.4. 分析

  • 3.4.1. 是大多数数据工作的核心

  • 3.4.2. 一旦你的数据被存储和转换,你就可以生成报告或仪表板并对数据进行临时分析

  • 3.4.3. 商业智能

    • 3.4.3.1. BI通过收集数据来描述企业的过去和当前状态

    • 3.4.3.2. BI需要使用业务逻辑来处理原始数据

    • 3.4.3.3. 用于分析的数据服务是数据工程生命周期各个阶段可能会纠缠在一起的另一个领域

    • 3.4.3.4. 业务逻辑通常在数据工程生命周期的转换阶段应用于数据,但读取逻辑方法越来越流行

      3.4.3.4.1. 数据以干净但相当原始的形式存储,具有最少的后处理业务逻辑

    • 3.4.3.5. BI系统维护一个业务逻辑和定义的存储库

      3.4.3.5.1. 此业务逻辑用于查询数据仓库,以使报告和仪表板与业务定义保持一致

  • 3.4.4. 数据质量差、组织孤岛和缺乏足够的数据技能通常会阻碍分析技术的广泛使用

  • 3.4.5. 运营分析

    • 3.4.5.1. 运营分析侧重于运营的精细细节,促进报告用户可以立即采取行动

    • 3.4.5.2. 运营分析侧重于运营的精细细节,促进报告用户可以立即采取行动

    • 3.4.5.3. 数据是实时消费的,直接来自源系统或流数据管道

    • 3.4.5.4. 运营分析中的洞察类型与传统BI不同,因为运营分析侧重于当前,不一定关注历史趋势

  • 3.4.6. 嵌入式分析

    • 3.4.6.1. 在SaaS平台上提供给客户的分析带有一组单独的要求和复杂性

    • 3.4.6.2. 内部BI面向的受众有限,一般呈现的统一视图数量有限

    • 3.4.6.3. 访问控制很关键,但并不特别复杂

    • 3.4.6.4. 使用少数角色和访问层来管理访问

    • 3.4.6.5. 每个客户都必须看到他们的数据,而且只能看到他们的数据

3.5. 多租户

  • 3.5.1. 数据工程师可能会选择将许多客户的数据存放在公用表中,以便为内部分析和机器学习提供统一的视图

  • 3.5.2. 该数据通过具有适当定义的控件和过滤器的逻辑视图在外部呈现给各个客户

  • 3.5.3. 数据工程师有责任了解他们部署的系统中多租户的细节,以确保绝对的数据安全和数据隔离

3.6. 机器学习

  • 3.6.1. 一旦组织达到高水平的数据成熟度,他们就可以开始识别适合机器学习的问题并开始围绕它组织实践

  • 3.6.2. 数据工程师的职责在分析和机器学习方面有很大的重叠,而且数据工程、机器学习工程和分析工程之间的界限可能很模糊

  • 3.6.3. 特征存储是最近开发的一种结合了数据工程和机器学习工程的工具

    • 3.6.3.1. 在实践中,数据工程师是支持机器学习工程的特征存储的核心支持团队的一部分
  • 3.6.4. 注意事项

    • 3.6.4.1. 数据质量是否足以执行可靠的特征工程?

      3.6.4.1.1. 质量要求和评估是与使用数据的团队密切合作制定的

    • 3.6.4.2. 数据是否可发现?

      3.6.4.2.1. 数据科学家和机器学习工程师能否轻松找到有价值的数据?

    • 3.6.4.3. 数据工程和机器学习工程之间的技术和组织边界在哪里?

    • 3.6.4.4. 数据集是否正确代表了基本事实?

      3.6.4.4.1. 是否存在偏见

  • 3.6.5. 在将大量资源投入机器学习之前,请花时间建立坚实的数据基础

    • 3.6.5.1. 意味着在数据工程和机器学习生命周期中建立最佳系统和架构

    • 3.6.5.2. 通常最好在转向机器学习之前先培养分析能力

    • 3.6.5.3. 许多公司已经因为在没有适当基础的情况下采取举措而破灭了机器学习梦想

3.7. 反向ETL

  • 3.7.1. 向ETL长期以来一直是数据中的一个实际现实,被视为一种我们不喜欢谈论或用名字来表示的反模式

  • 3.7.2. 反向ETL从数据工程生命周期的输出端获取经过处理的数据,并将其反馈回源系统

  • 3.7.3. 随着企业越来越依赖SaaS和外部平台,反向ETL变得尤为重要

    • 3.7.3.1. 广告平台是一个日常用例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2201444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

性能测试工具locust —— Python脚本参数化!

1.1.登录用户参数化 在测试过程中,经常会涉及到需要用不同的用户登录操作,可以采用队列的方式,对登录的用户进行参数化。如果数据要保证不重复,则取完不再放回;如可以重复,则取出后再返回队列。 def lo…

算法修炼之路之位运算

目录 一:位运算符及一些常用结论总结 1.给一个数n,确定它的二进制表示中的第x位是0还是1(位数从右向左0开始增加) 2.将一个数n的二进制表示形式的第x位修改成1 3.将一个数n的二进制表示的第x位修改为0 4.提取一个数n的二进制表示中最右侧的1 5.干掉一个数n的…

使用Android studio进行Unit Test中遇到的问题记录

1、模块本身代码运行不起来 提示: Cannot resolve method ‘getVolumes’ in ‘StorageManager’ Cannot resolve method ‘registerListener’ in ‘StorageManager’ Cannot resolve method ‘unregisterListener’ in ‘StorageManager’ 查看Android 源码&…

p20 docker自己commit一个镜像 p21 容器数据卷 p22mysql同步数据(国内镜像被封锁暂时往后放)p23具名挂载和匿名挂载

如何自己commit一个镜像 这里还是先引用一下老师的笔记 关于如何自己commit一个镜像这个问题目前因为从仓库中拉下来的Tomcat里面是没有项目的,所以把webapps.dist里面的拷贝到webapps里面去作为自己的镜像在commit一下 这里用Tomcat举例子首先把镜像拉取下来执…

C语言 | Leetcode C语言题解之第468题验证IP地址

题目&#xff1a; 题解&#xff1a; char * validIPAddress(char * queryIP) {int len strlen(queryIP);if (strchr(queryIP, .)) {// IPv4int last -1;for (int i 0; i < 4; i) {int cur -1;if (i 3) {cur len;} else {char * p strchr(queryIP last 1, .);if (p…

读懂RAG理论到实践

目录 LLM面临的问题RAG数据准备阶段检索生成阶段 RAG实战数据准备阶段数据提取数据清洗补充&#xff1a;去除停用词 分块&#xff08;Chunking&#xff09;分块的方法固定大小分块Sentence splitting&#xff08;句分割&#xff09;递归分割 补充&#xff1a;特殊分块 向量化&a…

Java项目实战II基于Java+Spring Boot+MySQL的作业管理系统设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在教育信息…

Spring Boot学习资源库:微服务架构的加速器

3 系统分析 3.1可行性分析 在进行可行性分析时&#xff0c;我们通常根据软件工程里方法&#xff0c;通过四个方面来进行分析&#xff0c;分别是技术、经济、操作和法律可行性。因此&#xff0c;在基于对目标系统的基本调查和研究后&#xff0c;对提出的基本方案进行可行性分析。…

网站集群批量管理-Ansible(playbook)

1.剧本概述 1. playbook 文件,用于长久保存并且实现批量管理,维护,部署的文件. 类似于脚本存放命令和变量 2. 剧本yaml格式,yaml格式的文件:空格,冒号 2. 区别 ans-playbookans ad-hoc共同点批量管理,使用模块批量管理,使用模块区别重复调用不是很方便,不容易重复场景部署服务…

视频流媒体解决方案,Liveweb国标GB28181视频监控汇聚平台

Liveweb视频监控国标平台指的是基于GB/T 28181协议的视频联网平台&#xff0c;可以对接各种符合国标GB/T 28181协议的视频平台、NVR录像机、网络监控摄像头、执法记录仪、应急布控球、移动单兵、无人机等设备。通过国标平台的联网&#xff0c;方便管理分布在不同地点的视频监控…

股指期货和股指期权有什么区别?

在金融衍生品的世界里&#xff0c;股权类衍生品无疑是其中的佼佼者&#xff0c;而股指期货和股指期权更是其中的佼佼者。尽管它们之间有着千丝万缕的联系&#xff0c;但它们之间的区别同样不容忽视。本文衍生股指君将详细解析股指期货和股指期权的核心区别。 一、交易的东西不…

【安装JDK和Android SDK】

安装JDK和Android SDK 1 前言2 下载2.1 下载途径2.2 JDK下载和安装2.2.1 下载2.2.2 安装并配置环境变量2.2.3 验证 2.3 SDK下载和安装2.3.1 下载2.3.2 安装2.3.3 环境变量配置2.3.4 验证 1 前言 在软件开发中&#xff0c;Android应用开发通常使用Android Studio&#xff0c;但…

进程守护化

文章目录 概念引入ps细节展示什么是进程组什么是会话细节演示有关指令的处理 用户级任务和进程组的关系关系不同 什么是守护进程如何创建守护进程 代码说明如何关闭守护进程 问题 概念引入 我们在之前的章节中已将看过进程相关的概念, 本篇介绍守护进程 进程还有进程组, 作业,…

Vue脚手架项目创建 --保姆级教程

Vue-项目创建 这里我默认已经安装好了脚手架&#xff0c;没装得可以看我上篇博客的安装教程。脚手架安装教程 脚手架提供了两种创建方式&#xff0c;我们以 vue ui 作为示例…… 1.输入 vue ui 进入图形界面进行项目配置 选择 一个你 的项目的存放路径&#xff0c;各自都不相…

[算法] 数组

1 二分查找 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-search/submissions/570732311/ 前闭后闭 class …

Word 中脚注和尾注的区别有哪些?如何正确使用它们?

在撰写学术论文、报告或其他需要引用资料的文章时&#xff0c;脚注和尾注是两种常用的标注方法。它们不仅可以为读者提供额外的背景信息&#xff0c;还能帮助整理文章中的引用来源。下面我们就来详细的了解一下什么是脚注和尾注。 脚注 脚注&#xff08;Footnote&#xff09;…

大学离散数学:开启逻辑与思维的奇妙之旅

在大学的知识殿堂中&#xff0c;离散数学犹如一颗璀璨的明珠&#xff0c;散发着独特的魅力。 离散数学是现代数学的一个重要分支&#xff0c;它主要研究离散对象的结构及其相互关系。与连续数学不同&#xff0c;离散数学处理的是离散的、可数的对象&#xff0c;如整数、图、集…

Kubernetes简介与部署+Pod管理与优化

一、简介 1.基础信息 在Docker 作为高级容器引擎快速发展的同时&#xff0c;在Google内部&#xff0c;容器技术已经应用了很多年Borg系统运行管理着成干上万的容器应用。Kubernetes项目来源于Borg&#xff0c;可以说是集结了Borg设计思想的精华&#xff0c;并且吸收了Borg系统…

动态线程池设计与实现

为什么要有动态线程池 ThreadPoolExecutor 核心线程参数对某些业务不知到设置多少合适调整参数需要重新启动服务没有告警功能 设计思路 流程设计 库表抽象 更新操作流程图 代码实现 GitCode - 全球开发者的开源社区,开源代码托管平台

C++ 内部类

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目&#xff1a;C知识点的补充_Jason_from_China的博客-CSDN博客 概念概述 如果一个类定义在另一个类的内部&#xff0c;这个内部类就叫做内部类。内部类…