当前位置: 首页 > 科技观察

五种最常用的流式ETL模型!_0

时间:2023-03-12 09:24:47 科技观察

1970年代的许多计算概念已经过时,但ETL(提取-转换-加载)及其更新的anagramshuffleELT并没有过时,它可以在目的地和动态中处理数据。ETL和ELT传统上是预定的批处理操作,但随着对始终在线、始终保持最新数据服务的需求成为常态,对数据流进行实时ELT操作是一个目标——如果不是现实的话——对于许多组织。实际上,ETL中的“T”代表由原始操作组装而成的模式。在本文中,我们将探索这些操作并查看如何将它们实现为SQL语句的示例。使用SQL语句转换?是的!SQL将声明性语言的强大和简单与任何使用代码或数据的人的一般技能相结合。与您可能用作替代品的几乎所有编程语言不同,SQL的流行归功于其将近50年的生命周期——计算行业中几乎每个人都在某个时候使用过它。SQL的强大功能和无处不在意味着它无处不在,甚至在构建最新开发人员技术和服务的公司中也是如此。当使用函数进行增强时,SQL变得更加强大。管道模式大多数ETL管道适合一种或多种模式。Decodable的连接流管道抽象意味着您可以选择将所有内容构建到单个管道中,或者根据需要将复杂的转换分解为由流连接的跨团队、区域和用例的可重用管道网络。1:Filter过滤器从流中移除不需要的记录,移除不符合SQLwhere子句中“规则”的记录。过滤器通常用于抑制敏感记录以确保合规性,或减少目标系统上的处理负载或存储要求。1--仅过滤与应用程序相关的记录23insertintoapplication_events45select*fromhttp_eventswherehostname='app.decodable.co'6789--仅过滤修改inventory1011insertinventory_updates1213select*fromhttp_eventswhere'apihostname=.mycompany.com'and1415pathlike'/v1/inventory%'and16methodin('POST','PUT','DELETE','PATCH')2:Route路由模式从一个或多个输入流创建多个输出Flow,它根据一组规则将记录定向到正确的目的地。这种模式实际上由多个过滤器组成,所有这些过滤器都可以查看每个输入记录,但每个过滤器只传输那些与特定目的地的规则相匹配的记录。1--路由安全相关的HTTP事件23insertintosecurity_events45select*fromhttp_eventswherepathlike'/login%'or67pathlike'/billing/cc%'8--Routeapp-relatedHTTPevents910insertintoapplication_events1112select*fromhttp_eventswherehostname='app.decodable.co'1314——如果用户需要help1516insertintocs_alerts1718select*fromhttp_events1920whereresponse_code在500和599之间或——任何ath和signup2122'(response_code!=200)或--由于任何原因未能注册3:transform转换管道通过修改输入记录来创建输出记录。通常这会导致1:1传输,但在某些情况下,输出来自多个输入记录,因此可能存在1:many关系。在这里我们将调用三个专门的转换:Transform:Extract解析输入记录,从输入记录中提取数据并将它们用作丰富派生输出记录的基础。1--解析时间戳和动作23insertintouser_events45select67to_date(fields['ts'],'YYYY-MM-DD''T''HH:MI:SS')asts,8fields['user_id']asuser_id,9fields['path']aspath,casefields['method']when'GET'then'read'10when'POST','PUT'then'modify'11when'DELETE'then'delete'12作为actionfrom(select13grok(14body,'\[${ISO8661_DATETIME:ts}${DATA:method}"${PATH:path}"uid:${DATA:user_id}'15)作为来自http_event16的字段结束)Transformation:Normalizing传入的数据记录通常需要被规范化为模式,以便目标系统能够处理它们。缺少的字段可能需要用默认值填充,可选字段可能需要删除,数据类型可能需要强制执行。1——为下游进程清理传入数据23插入传感器读数45选择67cast(ifnull(sensor_id,'0')asbigint)assensor_id,lower(trim(name))asname,cast(`value`asbigint)asreading89fromraw_sensor_readingsconversion:anonymous在目标系统不需要信息来完成处理的情况下,出于合规性、监管或隐私原因,匿名管道会简单地消除敏感字段。1--匿名SSNs和邮政编码2insertintouser_events_masked3select4user_id,5username,overlay(ssnplacing'*'from1for12)asssn,substring(zip_codefrom1for2)aszip_code_1,6action7fromuser_events4:Aggregation聚合管道通常使用SQL窗口函数将传入的记录分组到桶中(通常基于时间),在桶中执行聚合操作。Count、Min、Max、Avg、Sum是典型的运算符,但还有更多。1--每10秒按路径和状态统计事件数。23insertintosite_activity45select67window_start,8window_end,9path,10status,count(1)as`count`1112fromtable(1314tumble(tablehttp_events,descriptor(_time),15interval'10'seconds16)17)groupbywindow_start,window_end,path,status5:Trigger我们最终的模式是trigger。与几乎所有其他模式不同,触发器输出记录可能与输入记录的重叠很少,因为它表示已在一个或多个输入记录上检测到一组条件,并作为结果输出警报。输出模式可以表示检测到的条件、要采取的操作或两者。1--为输出流上的Stripe集成构建每小时使用数据23insertintostripe_product_usage45select67window_startas_time,8customer_id,'abcd1234'asprice_idsum(bytes_sent)/1024/1024asmb_sentfromtable(9tumble(tabledocument_downloads,descriptor(_time),10interval'1'hour11)12)groupbywindow_start,customer_idhavingmb_sent>1024