余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

Fivetran:自动化数仓集成服务

xiyangw 2023-05-14 11:30 14 浏览 0 评论

Fivetran简介

公司发展

Fivetran提供SaaS服务,它连接到业务关键数据源,提取并处理所有数据,然后将其转储到仓库中,以进行SQL访问和必要的进一步转换。
参考今年9月的融资消息,这家公司过去一两年里发展很迅速:

  • 2012年由Y Combinator发起,种子轮融资$4M。
  • 2018年12月,A轮融资额$15M,有80名员工。
  • 2019年9月,B轮融资额$44M,有175名员工。过去12个月收入增长3倍,当前有750多个客户。

核心理念

Fivetran要打造的是基于云的数据分析平台,其设计哲学可以概括为三点:

Fivetran:自动化数仓集成服务

  1. 选择合适的数据(仓)库:基于云的数据存储,存储与计算分离,例如Snowflak、BigQuery、Redshift。
  2. 将数据源可靠的复制到数据仓库,Ingest阶段尽量少地涉及数据转换。类似思想的还有Kafka Connect等系统,但Fivetran更强调自动化,包括:自动字段映射,数据与schema的同步。
  3. 彻底的践行E-L-T模式,用SQL语言在数据仓库上做业务层分析。

架构

与其核心理念一致,Fivetran是完全构建在云基础设施上的一套服务,使用到虚拟机、函数、对象存储、VPC、日志等服务。


这张图非常清晰描述了三个阶段:

  1. 获取源数据到工作节点,图例1、2、3。
  2. 准备数据写到临时存储,图例4。
  3. 将临时存储数据加载到目标数据仓库,图例5A、5B。

摄入与准备数据

支持150多种connector,分两大类:

  • pull connector:Fivetran主动发起请求下载数据,以固定时间间隔做周期调度。例如:通过ODBC/JDBC访问数据库,通过API访问web服务。
  • push connector:从源主动写数据到Fivetran,例如Webhook、Snowplow。接收到事件后,Fivetran以JSON格式存储数据到对象服务的文件。

connector获取到数据后,Fivetran会对数据做一些准备工作,包括:简单的过滤、排序和去重。在这个过程中,数据会缓存落盘,使用临时秘钥做加密。

加载数据到临时存储

Fivetran将准备完成的最终数据记录到文件,存储到bucket(可配置云厂商)。bucket归Fivetran所有,存储文件是经过加密的。
值得一提的是加密使用的秘钥是临时的,且秘钥只存放在connector进程内。为什么这么做?

加载数据到数仓

Fivetran将文件拷贝至目标数仓,同时该处理进程将秘钥也传递给数仓用于解密数据。当数据仓库完成对用户表的数据插入或修改后,connector进程运行完成并结束,scheduler在下一次触发时再次启动connector进程。
至此,回答上一节的问题。密钥只存在于connector进程的内存中,即使后台系统的VPC、Bucket、EC2被入侵,用户的数据也能保证不被泄露。

系统生成内容

Fivetran会为用户生成一些系统表格、列。例如fivetran_audit表格记录每次任务的运行概览,包括:任务id、起止时间、状态、唯一的update_id、处理数据行数等。

系统为目标数仓表添加的保留列有:

  • fivetran_synced (UTC TIMESTAMP):数据处理时间。
  • fivetran_deleted (BOOLEAN) :数据在源中是否被删除。
  • fivetran_index (INTEGER):对于无主键表,标识update发生的顺序。
  • fivetran_id (TEXT) :系统分配的唯一ID,用于无主键表的去重。
  • fivetran_id2 (TEXT) :系统分配的唯一ID,在null主键情况下,用于再区分。

这些保留字段的加入,主要用意还是透明化,帮助用户了解数据集成干了哪些事,方便问题追溯。

日志

Fivetran记录connector的操作事件,可以存储到AWS CloudWatch、GCP Stackdriver、Azure Log Analytics。

数据集成

数据源

Fivetran将数据源分为四类:

  • Application:例如Google Ads等软件服务商上记录了一些系统数据,可以通过API获取。
  • Database:RDS、NoSQL。
  • File:包括Azure、AWS、GCP三家的对象存储,DropBox,FTP等数据源。
  • Event:网页、移动App、邮件等数据源,如下图,Fivetran额外构建了网关用于接收数据。

Function

如果一定要在数据集成阶段就做一些转换操作,支持AWS、Azure、GCP三家函数服务。这与AWS Kinesis Firehose集成Lambda的方式一致。函数的实现要求做到幂等性,系统会重试请求直到成功,再把结果写到bucket。

数仓分析

connector的目标包括单机数据库(MySQL、SQLServer,PostgreSQL)和分布式数仓(推荐)。
connector进程将数据从源复制到base table,base table是数据在用户数仓上的第一站。Fivetran的同步是带状态的,通过和系统内部数据对比可以避免对目标表做全量scan。用户不直接在base table上做修改,因为可能导致后续的sync策略失效。因此,如果有修改base table再读需求,推荐用view来实现。

Schema迁移

在一次数仓update中,比较新读取的源数据与已经投递给数仓的系统内部数据,可以实现schema的同步。

  • 表改动:新的object会自动创建数仓表。rename解释为一次delete和create组合。
  • 列改动:新加列会触发一次对表中的所有行的全量导入。删除列在数据仓库中保持不变,该列在新增数据行中设为null。但如果伴随着其它改动并触发了表的重新全量导入,那么已删除列中的先前的数据会被清除掉。
  • 列类型改动:如果是宽转换(例如int转bigint)的,那么直接在数仓更新列的类型。而窄转换(例如从varchar(100)转varchar(20))的改变会触发一次全表的重新导入。

Transformation

同样是做数据转换,与Function区别是:Function发生在数据Ingest阶段,Transformation则是E-L-T的T,发生在数据到达目标数仓的分析阶段。
Transformation完全使用SQL,通过触发器(新数据被load到数仓后)或基于时间的调度策略,自动触发表转换。

观察与总结

云数仓

Fivetran是新派的ETL玩家,不仅自己的服务系统基于云构建,连用户侧分析也是云上的数仓。
Hadoop、AWS Athena走数据湖线路,可以快速完成初期系统的搭建,但可能因为缺乏数据schema规划、缺少计算下推的辅助,牺牲了一定的分析效率。
以AWS Redshift、Hive为代表的数仓,提供高效率的压缩存储以及存储、计算的一体化,提升了分析效率,但系统搭建依赖前期表和schema设计,以及在将来schema变化时伴随着维护成本。
Fivetran选择适配多数仓系统,由用户根据业务场景自主选择用什么做分析。使用SQL(被广泛支持的数仓语言)统一用户的Transform、Analytics使用体验。

E-L-T

这也是云数仓带来的另一个好处,水平扩展的计算和存储。这简化了对数据集成的使用,数据只需要安全达到数仓base table即可。而只要base table数据存在,通过交互式的查询可以动态修正业务分析的策略,并快速拿到结果。

自动化管道

无论是数据的导入还是schema的同步,自动化都在尝试解决ETL pipeline维护复杂的问题,这个功能具有现实意义。Fivetran CEO表示他们在幕后驱动自动化的过程非常复杂,但服务会努力向客户隐藏这种复杂性。

安全很重要

涉及到PII信息或是满足GDPR等合规要求,服务对数据加密访问做了细致的设计,可以看到安全性在这样的第三方厂商摆在了很高的优先级。

参考资料

  1. https://fivetran.com/docs
  2. https://www.youtube.com/watch?v=5-s8NfuPf9s
  3. 图片取自fivetran材料

个人学习总结,理解不到位处请斧正。

作者:唐恺

相关推荐

辞旧迎新,新手使用Containerd时的几点须知

相信大家在2020年岁末都被Kubernetes即将抛弃Docker的消息刷屏了。事实上作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使...

分布式日志系统ELK+skywalking分布式链路完整搭建流程

开头在分布式系统中,日志跟踪是一件很令程序员头疼的问题,在遇到生产问题时,如果是多节点需要打开多节点服务器去跟踪问题,如果下游也是多节点且调用多个服务,那就更麻烦,再者,如果没有分布式链路,在生产日志...

Linux用户和用户组管理

1、用户账户概述-AAA介绍AAA指的是Authentication、Authorization、Accounting,即认证、授权和审计。?认证:验证用户是否可以获得权限,是3A的第一步,即验证身份...

linux查看最后N条日志

其实很简单,只需要用到tail这个命令tail-100catalina.out输入以上命令,就能列出catalina.out的最后100行。...

解决linux系统日志时间错误的问题

今天发现一台虚拟机下的系统日志:/var/log/messages,文件时间戳不对,跟正常时间差了12个小时。按网上说的执行了servicersyslogrestart重启syslog服务,还是不...

全程软件测试(六十二):软件测试工作如何运用Linux—读书笔记

从事过软件测试的小伙们就会明白会使用Linux是多么重要的一件事,工作时需要用到,面试时会被问到,简历中需要写到。对于软件测试人员来说,不需要你多么熟练使用Linux所有命令,也不需要你对Linux...

Linux运维之为Nginx添加错误日志(error_log)配置

Nginx错误日志信息介绍配置记录Nginx的错误信息是调试Nginx服务的重要手段,属于核心功能模块(nginx_core_module)的参数,该参数名字为error_log,可以放在不同的虚机主...

Linux使用swatchdog实时监控日志文件的变化

1.前言本教程主要讲解在Linux系统中如何使用swatchdog实时监控日志文件的变化。swatchdog(SimpleWATCHDOG)是一个简单的Perl脚本,用于监视类Unix系统(比如...

syslog服务详解

背景:需求来自于一个客户想将服务器的日志转发到自己的日志服务器上,所以希望我们能提供这个转发的功能,同时还要满足syslog协议。1什么是syslog服务1.1syslog标准协议如下图这里的fa...

linux日志文件的管理、备份及日志服务器的搭建

日志文件存放目录:/var/log[root@xinglog]#cd/var/log[root@xinglog]#lsmessages:系统日志secure:登录日志———————————...

运维之日志管理简介

日志简介在运维过程中,日志是必不可少的东西,通过日志可以快速发现问题所在。日志分类日志分类,对不同的日志进行不同维度的分析。操作系统日志操作系统是基础,应用都是在其之上;操作系统日志的分析,可以反馈出...

Apache Log4j 爆核弹级漏洞,Spring Boot 默认日志框架就能完美躲过

这两天沸沸扬扬的Log4j2漏洞门事件炒得热火朝天:突发!ApacheLog4j2报核弹级漏洞。。赶紧修复!!|Java技术栈|Java|SpringBoot|Spring...

Linux服务器存在大量log日志,如何快速定位错误?

来源:blog.csdn.net/nan1996jiang/articlep/details/109550303针对大量log日志快速定位错误地方tail/head简单命令使用:附加针对大量log日志...

Linux中查看日志文件的正确姿势,求你别tail走天下了!

作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了。尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于我这种小菜鸡来说,第一反应就是cat,tail,vi(或...

分享几款常用的付费日志系统,献给迷茫的你!

概述在前一篇文章中,我们分享了几款免费的日志服务器。他们各有各的特点,但是大家有不同的需求,有时免费的服务器不能满足大家的需要,下面推荐几款付费的日志服务器。1.Nagios日志服务器Nagio...

取消回复欢迎 发表评论: