阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

五种流式ETL模式总结

72次阅读
没有评论

共计 3252 个字符,预计需要花费 9 分钟才能阅读完成。

导读 在实际使用中,ETL 中的“T”代表由原始操作组装而成的各种模式。在本文中,我们将探索这些操作并查看如何将它们实现为 SQL 语句的示例。

​1970 年代的许多计算概念已经过时,但 ETL (Extract-Transform-Load) 及其最近的 anagram shuffle ELT 并非如此,它在目的地与飞行中操纵数据。ETL 和 ELT 传统上是计划的批处理操作,但随着对始终在线、始终最新的数据服务的需求成为常态,在数据流上操作的实时 ELT 是许多组织的目标——如果不是现实的话。

在实际使用中,ETL 中的“T”代表由原始操作组装而成的各种模式。在本文中,我们将探索这些操作并查看如何将它们实现为 SQL 语句的示例。

使用 SQL 语句进行转换?

是的!SQL 将声明性语言的强大和简洁性与任何使用代码或数据的人的普遍技能相结合。与您可能用作替代的几乎任何编程语言不同,SQL 的普及要归功于将近 50 年的寿命——计算行业中的几乎每个人都曾在某个时候使用过它。SQL 的强大功能和普遍性意味着它无处不在,甚至在构建最新开发人员技术和服务的公司中也是如此。当通过函数增强时,SQL 变得更加强大。

管道模式
1:过滤器

五种流式 ETL 模式总结

过滤器从流中删除不需要的记录,删除与 SQL where 子句中的“规则”不匹配的记录。过滤器通常用于抑制敏感记录以确保合规性,或减少目标系统上的处理负载或存储需求。

Filter only records pertaining to the application
insert into application_events
select * from http_eventswhere hostname = 'app.decodable.co'
Filter only records that modify the inventory
insert into inventory_updates
select * from http_eventswhere hostname = 'api.mycompany.com' and
path like '/v1/inventory%' and
method in ('POST', 'PUT', 'DELETE', 'PATCH')
2:路线

五种流式 ETL 模式总结

Route 模式从一个或多个输入流创建多个输出流,根据一组规则将记录定向到正确的目的地。此模式实际上由多个过滤器组成,它们都可以查看每个输入记录,但每个过滤器仅传输与该特定目的地的规则匹配的那些记录。

Route security-related HTTP events
insert into security_events
select * from http_eventswhere path like '/login%' or
path like '/billing/cc%'
Route app-related HTTP events
insert into application_events
select * from http_eventswhere hostname = 'app.decodable.co'
Route requests to Customer Success if it looks like the user needs help
insert into cs_alerts
select * from http_events
where response_code between 500 and 599 or -- any server failure
(path = '/signup' and response_code != 200) or -- failed to sign up for any reason
3:变换

五种流式 ETL 模式总结

转换管道通过修改输入记录来创建输出记录。通常这将导致 1:1 传输,但在某些情况下,输出来自多个输入记录,因此可能存在 1:many 关系。在这里,我们将调用三个专门的转换:

变换:提取

五种流式 ETL 模式总结

解析输入记录,从输入记录中提取数据并将其用作丰富派生输出记录的基础。

Parse timestamp and action
insert into user_events
select
to_date(fields['ts'], 'YYYY-MM-DD''T''HH:MI:SS') as ts,
fields['user_id']    as user_id,
fields['path']       as path,  case fields['method']    when 'GET'         then 'read'
when 'POST', 'PUT' then 'modify'
when 'DELETE'      then 'delete'
end as actionfrom (  select
grok(body,      '\[${ISO8661_DATETIME:ts} ${DATA:method}"${PATH:path}"uid:${DATA:user_id}'
as fields  from http_event

变换:归一化

五种流式 ETL 模式总结

传入的数据记录通常需要针对模式进行规范化,以便目标系统处理它们。缺少的字段可能需要填充默认值,可能需要删除可选字段,并强制执行数据类型。

Cleanse incoming data for downstream processes
insert into sensor_readings
select
cast(ifnull(sensor_id, '0') as bigint) as sensor_id,  lower(trim(name))                      as name,  cast(`value` as bigint)                as reading
from raw_sensor_readings

转换:匿名化

五种流式 ETL 模式总结

在目标系统不需要信息来完成处理的情况下,匿名管道只是出于合规、监管或隐私原因而消除了敏感字段。

Anonymize SSNs and zip codes
insert into user_events_masked
select
user_id,
username,  overlay(ssn placing '*' from 1 for 12) as ssn,  substring(zip_code from 1 for 2)       as zip_code_1,
action
from user_events
4:聚合

图片聚合管道通常使用 SQL 窗口函数将传入记录分组到存储桶中(通常基于时间),在这些存储桶上执行聚合操作。Count、Min、Max、Avg、Sum 是典型的运算符,但还有很多。

Count the number of events by path and status every 10 seconds.
insert into site_activity
select
window_start,
window_end,
path,
status,  count(1) as `count`
from table(tumble(    table http_events,    descriptor(_time),
interval '10' seconds
  )
)group by window_start, window_end, path, status
5:触发

五种流式 ETL 模式总结

我们的最终模式是触发器。与几乎所有其他模式不同,触发器输出记录可能与输入记录的模式几乎没有重叠,因为它表明已在一个或多个输入记录上检测到一组条件,并作为结果输出警报。输出模式可以表示检测到的条件、要采取的行动或两者兼而有之。

Build hourly usage data for a Stripe integration on the output stream
insert into stripe_product_usage
select
window_start as _time,
customer_id,  'abcd1234' as price_id  sum(bytes_sent) / 1024 / 1024 as mb_sentfrom table(tumble(    table document_downloads,    descriptor(_time),
interval '1' hour  )
)group by window_start, customer_idhaving mb_sent > 1024

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计3252字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中