在年底努力做个人软件产权的同时,先对当前方法进行简单记录。
1、ETL和ELT的区别
基本概念:
• 抽取是将数据从已有的数据源中提取出来,例如通过 JDBC/Binlog 方式获取 MySQL 数据库的增量数据;
• 转换是对原始数据进行处理,例如将用户属性中的手机号替换为匿名的唯一 ID、计算每个用户对商品的平均打分、计算每个商品的购买数量、将 B 表的数据填充到 A 表中形成新的宽表等;
• 加载是将数据写入目的地。
场景导致转化和和加载的顺序发生变化:
• ETL 在数据源抽取后首先进行转换,然后将转换的结果写入目的地。
• ELT 则是在抽取后将结果先写入目的地,然后由下游应用利用数据库的聚合分析能力或者外部计算框架,例如 Spark 来完成转换的步骤。
为什么会这样,并且ELT更加适合AI的应用场景?
2、ETL和ELT分别适用哪些场合
ELT更加适合AI前线的场景:
在具体算法建模过程中,每个算法所需要的训练数据不同,所以ETL中做再多的T操作,在实际运用中都会发生变化。
• 首先这是由 AI 应用对数据转换的高度灵活性需求决定的。 绝大多数 AI 应用使用的算法模型都包括一个特征提取和变换的过程。根据算法的不同,这个特征提取可能是特征矩阵的简单的归一化或平滑处理,也可以是用 Aggregation 函数或 One-Hot 编码进行维度特征的扩充,甚至特征提取本身也需要用到其它模型的输出结果。这使得 AI 模型很难直接利用 ETL 工具内建的转换功能,来完成特征提取步骤。此外,企业现在很少会从零构建 AI 应用。当应用包括 Spark/Flink MLlib 在内的机器学习框架时,内建的模型库本身往往包含了特征提取和变换的逻辑,这使得在数据提取阶段就做复杂变换的必要性进一步降低;
• 其次,企业经常会基于同样的数据构建不同应用。 以我之前所在的一家在线教育公司为例,我们构建了两个 AI 的应用:其中一个是针对各类课程的推荐应用,主要用于增加用户的购买转化率。另外一个是自适应学习系统,用于评估用户的知识掌握程度和题目的难度和区分度,从而为用户动态地规划学习路径。两个应用都需要用户属性、做题记录、点击行为以及学习资料文本,但采用的具体模型的特征提取和处理方式完全不同。如果用 ETL 模式,我们需要从源端抽取两遍数据。而采用 ELT 模式,所有数据存储在 HBase 中,不同的应用根据模型需要过滤提取出所需的数据子集,在 Spark 集群完成相应的特征提取和模型计算,降低了对源端的依赖和访问频次;
• 最后,主流的机器学习框架,例如 Spark MLlib 和 Flink MLlib,对于分布式、并行化和容错都有良好的支持,并且易于进行节点扩容。 采用 ELT 模式,我们可以避免构建一个专有数据转换集群(可能还伴随着昂贵的 ETL 产品 License 费用),而是用一个通用的、易于创建和维护的分布式计算集群来完成所有的工作,有利于降低总体拥有成本,同时提升系统的可维护性和扩展性。
网友评论