为什么ETL变成ELT甚至放任?
#编程 #sql #database #bigdata

etl,提取物的缩写,变换和负载是通过提取,转换和加载将数据从一个或多个来源转移到目标系统的过程。常规的ETL过程应遵守提取数据,转换数据然后将数据加载到目标系统(通常是数据库)的顺序。最终加载到数据库的数据应该是所需的结果。但是,该过程的实际执行通常会更改此合理的顺序。 ETL成为ELT或LET,在将源数据加载到目标数据库之前,在转换甚至提取之前。

源数据可能来自不同的来源,例如数据库,文件和Web,并且具有不同级别的数据质量。 E和T都是计算密集型的,在各种数据源中,数据库具有最佳的计算能力,而其他数据库具有少量或没有的计算能力。将源数据加载到数据库中已成为完成计算的第一个方便的选择。这导致了。有时数据源自多个数据库。跨数据库的数据提取和转换不如将数据加载到目标数据库以进行进一步处理。这也导致LET或ELT。

但是ELT/让我们可能带来一系列问题。

一个方面是时间成本增加。将大量的非提取和未转换的原始数据(或无用的)数据加载到数据库中已经非常耗时,在该数据库中,计算资源受到限制。然后,一定要花很长时间来处理数据库中的额外E和T计算,从而为整个过程增加了更多时间。 ETL是时间限制的。它通常是在据称每天闲置时间的过程中执行的,这是通常已知的ETL时间窗口(例如,第二天早晨从22 o到5个时钟)。如果在指定期间无法完成ETL作业,则第二天的业务将受到影响。如果ETL过程太长,则时间窗口会变窄,并且业务将受到损坏。

另一个是数据库负载增加。存储大量的未提取和未转换的原始数据将占用太多数据库空间,从而导致大量数据库负载,从而导致可扩展性压力。为了加载当今应用程序大量使用的多级JSON或XML数据,需要在数据库中创建多个相关的数据表,从而进一步加剧了数据库容量问题。随着计算的增加,数据库资源减少,时间窗口变窄。这使系统陷入了恶性循环。

但是,为什么我们需要在执行E和T之前将数据加载到数据库?如前所述,这是因为非数据库数据源具有较差的计算能力,人们希望通过将数据首先加载到其中来利用数据库强大的能力。如果我们可以提供令人满意的外部数据库计算能力,我们将不再需要进行数据加载,并且可以恢复合理的ETL过程。

开源ESPROC SPL是实现外部数据库计算能力的理想工具。

SPL是一种开源的独立数据计算引擎。它具有与数据库无关的计算能力,用于连接和访问各种数据源并执行数据处理。它丰富的类库,敏捷语法和对程序编程的支持使得以ETL过程的原始顺序处理复杂的数据计算任务变得方便。它在数据库外执行提取(e)和转换(t),然后将准备好的数据加载到目标数据库,完成True ETL。

外部数据库计算引擎启用True ETL

支持各种数据源和混合计算

SPL可以连接并访问各种数据源,不管它具有或没有任何计算能力来通过其方法和语法来方便,有效地处理数据提取和转换。

Image description

SPL的一个特定特征是它在不同数据源之间实现混合计算的能力。它从不同来源提取数据,将其转换并加载到数据库中,而无需数据库计算能力。它为JSON和XML(例如JSON和XML)提供了方便,有效的支持。一个简单的功能足以解析它们。

这是一个简单的例子。要对来自JSON文件和数据库表的数据执行特定操作:

    A   
1   =json(file("/data/EO.json").read()) Parse JSON data
2   =A1.conj(Orders)    
3   =A2.select(orderdate>=date(now()))  Get data of the current date
4   =connect(“sourcedb”).query@x(“select ID,Name,Area from Client”) Retrieve data from the database
5   =join(A3:o,Client;A4:c,ID)  Perform a join between JSON data and database data
6   =A5.new(o.orderID:orderID,…)  
7   =connect(“targetdb”).update(A6,orders)  Load result data to the target database

出色的计算能力和程序控制
SPL提供了专门的结构化数据对象和许多操作。它可以直接支持基本计算,例如分组和聚合,循环和分支,分类,过滤和设置操作,以及复杂的计算,例如获得位置,基于订单的排名和不规则分组。

Image description

SPL支持专门用于大数据计算的光标。它可以使用数们计算适合内存的数据的方式来处理大量通过光标超过内存容量的数据。从文件和组中检索数据并使用光标进行总结,例如:

=file(“persons.txt”).cursor@t(sex,age).groups(sex;avg(age))

以下是检索内存数据的代码:

=file(“persons.txt”).import@t(sex,age).groups(sex;avg(age))

此外,SPL支持程序编程,该程序可以根据熟悉的思维方式逐步编码计算。这使其适用于处理复杂的ETL计算,这些计算是通过数据库中的存储程序实现的。外部数据库SPL计算具有灵活性和高性能,并且与存储过程一样有效,同时在数据库上不施加工作量。外部数据库存储过程可以是常规存储过程的理想替代方法。 SPL计算尽可能多地减少数据库负载。传统上在数据库中处理的E和T计算现在都在数据库之外进行。这避免了消耗数据库计算资源,并存储大量未提取和未转换的原始数据,这有助于减少空间使用情况。使用SPL,将没有数据库资源和容量短缺的问题。

SPL具有比SQL和Java的敏捷语法更多的。它实现了E和T计算,尤其是复杂的计算,具有更简洁的算法和较短的代码。这大大提高了发展效率。我们有一种使用SPL来执行ETL来为保险公司实施车辆保险单的情况。 SPL使用少于500个代码(在SPL网格式代码中)实现计算,而最初使用存储过程将其处理2000行代码。工作量减少了三分之一(请参阅Open-source SPL optimizes batch operating of an insurance company from 2 hours to 17 minutes)。

从技术堆栈的角度来看,SPL使用了一致的语法样式,可以在ETL处理过程中为各种数据源具有统一的计算能力。除了通用技术方法外,SPL还使方便开发和维护程序。由于程序员不需要知道处理来自不同来源的数据的不同方式,因此学习成本降低了。重要的是,统一的技术方法使SPL代码非常易于迁移。程序员在ETL计算过程中尝试切换到其他源时只需要更改数据检索代码,同时维护基本计算逻辑。

足够的ETL时间窗口得益于高性能计算
从SPL中并行处理的源检索数据很方便,从而使多个CPU的优势完全发挥作用,以加快数据检索和计算。例如,用多个线程检索数据,例如:

    A   B
1   fork to(n=12)   =connect("sourcedb")
2   
=B1.query@x("SELECT * FROM ORDERS WHERE MOD(ORDERID,?)=?", n, A3-1)
3   =A1.conj()  

您还可以使用多线程处理来从巨大文件中检索数据:

=file(“orders.txt”).cursor@tm(area,amount;4)

SPL提供@M选项来创建并行多弹器,自动处理并行处理并总结结果集。许多SPL功能,例如用于过滤的A.Select()和用于排序的A.Sort(),支持使用@M选项来启用自动并行处理。

ETL过程通常涉及数据持久性 - 我们的意思是存储中间结果或最终结果。 SPL提供两种二进制存储格式。它们存储数据类型,以避免数据解析并提高效率,使用合理且适当的压缩机制来平衡CPU负载和磁盘访问时间,支持行式的存储和列的存储空间,以适应更多样化的方案,并提供独特的双重增量分割技术以在可添加的单个文件上实现细分,以促进并行处理。这些高性能的存储机制是计算性能的基本保证 - 正确的存储机制和有效算法是我们所知的高性能计算的基石。

SPL提供大量的高性能算法。在前面提到的文章Open-source SPL optimizes batch operating of an insurance company from 2 hours to 17 minutes中,SPL不仅将代码量减少到原始的三分之一,而且使用其独特的多功能遍历技术将计算时间从2小时缩短到17分钟。该技术可以在一个巨大的数据表的一次遍历中进行多个操作,从而有效地减少了外部存储访问。但是,RDB在SQL中不能做同样的事情。他们需要多次遍历多个操作。在上面的文章中,有一个计算涉及一张大表格上的三个连接和聚集体。 SQL将三次穿越桌子,但SPL仅需要一个遍历。这就是为什么SPL可以显着提高性能。

通常在巨大的主表和ETL过程中串曲之间存在连接,例如订单表和订单尾桌表之间的一个。对于这样的联接,表是通过主键关联的(或主键中的密钥和键在键中的部分),并且它们具有一对多的关系。如果我们提前通过其主要键订购表,我们可以使用基于订单的合并算法执行加入。与传统的哈希联接算法相比,基于订单的合并可以降低从O(N*M)到O(M+N)的计算程度,并大大提高了性能。数据库基于无序集的理论,SQL很难利用有序数据来提高性能。在同一篇文章中,SPL明显改善了使用基于订单的合并算法的主要sub表加入计算。

o,使用计算专家SPL作为ET引擎,将数据计算部分与ETL过程中的源端和目标端分离并使数据计算零件使高度灵活且易于迁移代码以及对源和源和中等压力目标。外部数据库计算的便利有助于以其原始顺序实现ETL过程。 SPL还通过其高性能存储格式和算法和并行处理技术确保有效的ETL过程,在有限的时间窗口中完成尽可能多的ETL任务。

SPL源代码:https://blog.scudata.com/why-etl-becomes-elt-or-even-let/
来源:https://blog.scudata.com/why-etl-becomes-elt-or-even-let/