从ETL与ELT谈起,理解数仓的任务

2024-05-07 01:28
文章标签 理解 数仓 任务 etl 谈起 elt

本文主要是介绍从ETL与ELT谈起,理解数仓的任务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近有个朋友,有几十 PB 的异构数据,数据源包括 MySQL、DB2、Oracle、CSV、磁带机,等等,然后他需要把这些数据中的一些信息做关联整合,从这几十 PB 的数据中提取出若干业务字段到数据仓库,做统一分析。

数据载入

他让我推荐数据提取工具,我学习了一下,发现带 GUI 的开源工具里,AirByte 非常不错,界面大方,支持的 Connector 种类丰富。但是,当我深入研究下去发现一个问题,它的文档里居然没有任何从表格里提取出若干列做同步的描述,倒是支持把数据同步到目标库后,再基于 dbt 做自动转换的能力。再一学习才注意到:AirByte 是一个 E-L-T! 工具,而不是一个 ETL 工具!ELT、ETL,一字之差,用途相差万里。

  • E:Extract,指的是从源端拉取数据,可能是一个 SELECT、可能是 BINLOG、可能是一个文本文件读取动作
  • L:Load,指的是把数据装载到数据仓库,通常基于 INSERT 语句实现。
  • T:Transform,指的是对数据做转换。在 ETL 中,T 通常是由负责数据同步的软件来完成,在 ELT 中,这个门道就多了,负责数据同步的软件一定会做 E、L 两个操作,至于后面的 T,在 AirByte 中它提供的解决方案是 dbt,在其它系统里,可能会依赖目标库/湖的其它解决方案,可以非常灵活。

我以前觉得,ELT 是真好,方便多了。数据先入湖,以后随时用随时变换,多方便灵活。嗯,看上去很美。而实际上,对应的麻烦事可真是一大堆!

  • 数据传输成本大增。我朋友的这个案例里,他的原始数据有几十 PB,但是抽取后的目标数据,大概就是百 T 的水平。ETL 只需要传百 T 的数据,而 ELT 则需要传输几十 PB 的数据,百倍的差距。
  • 存储成本大增。全量数据存在目标库里,会有非常大的存储成本。还不敢随便用过期策略。
  • 管理成本大增。因为数据已经入了湖,但是里面大部分是永远用不到的垃圾数据,如何管理这些数据,也是个头疼事。

从这个实际案例我意识到,ETL、ELT 没有好坏之分,用 ETL 还是 ELT,还是要根据业务来选择。浪漫、性感,在成本面前,不值一提。

数仓

另一个直观的感受就是“数仓”的概念很具体了。数仓很大的价值点就是数据归集作用,这个案例里体现得非常明显。

我挺想给他推荐 OceanBase 开源版的,可惜他要求数据全场景加密,TDE(Transparent Data Encryption)必不可少。而这个我们没有开源。

另外就是我们的存储成本还是高,他的场景里,如果数据存在 S3 里,延迟大点也能接受,QPS 非常低,一天也就查几次。这个挺适合 4.4 的场景,但目标的场景不划算。

最后,他这个场景我给他推荐了 Snowflake,S3存储成本很低,QPS 非常低,说不定机器还可以随用随关。

其它

AirByte 不太行,于是看了 Kettle 和 Astera,感觉 Kettle 像是上个时代的产物,没人维护了一样,Astera 感觉可能还可以,但是网站也很老旧,十年前的风格。TapData 商业版看上去还挺不错的,DB2作为数据源都支持,但是,搜下来,发现居然不支持以 Snowflake 作为目标写入!!!!

熬!AirByte,你怎么就不支持 ETL 了呢!你完全可以支持一个 ETLT 呀!

这篇关于从ETL与ELT谈起,理解数仓的任务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/965938

相关文章

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

Python Invoke自动化任务库的使用

《PythonInvoke自动化任务库的使用》Invoke是一个强大的Python库,用于编写自动化脚本,本文就来介绍一下PythonInvoke自动化任务库的使用,具有一定的参考价值,感兴趣的可以... 目录什么是 Invoke?如何安装 Invoke?Invoke 基础1. 运行测试2. 构建文档3.

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。