ELT Airbyte Airflow dbt 玩转数据

ELT 是 ETL的一种替代方案

ELT 是 ETL的一种替代方案。企业通常有大量数据分散在 CRM、营销、客户支持和产品分析等工具中。虽然访问数据不是问题,但从不同位置和格式的存储数据中获得有意义的分析才是问题。实现这一目标的过程是:“提取、转换、加载”(ETL),这需要在数据到达中央数据仓库之前对数据进行转换。目前还有一种替代方案:“提取、加载、转换”(ELT),允许公司在原始数据进入仓库时按需转换。

Airbyte 是一个用于构建 ELT 管道的开源数据集成平台,整合用户数据仓库、数据湖和数据库中的数据。

Airflow 是用 Python 写的,支持 Python 2/3 两个版本。 传统 Workflow 通常使用 Text Files (json, xml / etc) 来定义 DAG, 然后 Scheduler 解析这些 DAG 文件形成具体的 Task Object 执行;Airflow 没这么干,它直接用 Python 写 DAG definition, 一下子突破了文本文件表达能力的局限,定义 DAG 变得简单。

Fishtown Analytics 是开源“分析工程”工具 Dbt(数据构建工具)背后的公司,该公司更名为 Dbt Labs。Dbt Labs 是开源分析工程工具的开发商,其使命是帮助分析师创建和传播组织知识。分析工程是指在原始数据进入数据仓库后获取原始数据并为分析做准备的过程,这意味着 Dbt 有效地充当了 ELT 中的“T”。

它被称为dbt,即数据构建工具,它是一种非常灵活的命令行数据管道工具,它使我们能够非常快速,非常轻松地收集和转换数据以进行分析!dbt无需完全重新编程您的管道。

dbt仍然像常规数据库一样是基于SQL构建的,但是它具有使用诸如jinja之类的模板引擎在其之上构建的附加功能。这有效地使您能够在SQL中引入更多逻辑(即循环,函数等)以访问,重新排列和组织数据。有点像对数据集进行编程,但具有更大的灵活性和更多选择。

数据集成和应用集成 你瞅啥?

数据集成和应用集成是组织利用来自不同系统的数据的方法,但它们满足不同的需求。它们经常被错误地视为相同,然而应用程序集成和数据集成的概念有很大的不同,尤其是在它们的使用方式和用途方面。

数据集成

数据集成是集成两个或多个数据库数据的过程(process)。关注于管理数据流,并且每个标准化的信息获取方式;是面向批处理的,它处理静态数据。换句话说,数据集成是对应用系统已产生并“落地”后的数据进行感知、抽取、传输、处理、加载到目标库的整个过程,即数据集成的任务开始时,源端应用系统的数据产生过程已完成了。

数据集成领域还包括一些特殊的应用场景,如异构数据库间的复制同步(即按事务边界实时复制Replicate)、 CDC(日志DML、DDL获取及同步)、 数据文件(txt、csv、excel等)加载数据库、以及非结化文件交换传输(文件目录、FTP、HDFS)等应用场景。

特征

  • 参与数据集成的各个应用系统与集成任务是互相独立的,应用系统无需知道运行中的数据集成任务;
  • 数据集成任务可以是实时的、准实时的、或批处理定时的;
  • 当交换的数据完成时,目标系统无需立即给源端系统反馈信息,因而往往是异步处理过程;
  • ETL、ELT、CDC技术往往用于数据集成场景中

应用集成

应用集成是指两个或多个应用之间的协同处理过程(process)。在两个或多个应用程序之间创建连接器,以确保它们可以一起运行。应用程序集成过程涉及实时处理小数据集;这使公司能够在与性能相关的问题、新信息等出现时加快响应速度。

特征

  • 参与应用集成的数据库无需知道运行中的应用集成过程(process);
  • 消费数据的应用系统在应用层保持之间的依赖性(耦合度相对高);
  • 应用集成是实时的且需要双向的握手(handshake);
  • 消费数据后,目标业务过程可以返回执行结果给源端应用,因而往往是同步的处理过程;
  • 被集成交换的数据可无需“落地”数据库,仅由用户界面使用数据进行展示;
  • 面向服务的架构(SOA)设计理念及ESB技术产品往往应用于应用集成领域。

apache hive 大数据的ETL工具/ 数据仓库

Hive是一个基于Hadoop的数据仓库平台。通过hive,我们可以方便地进行ETL的工作。hive定义了一个类似于SQL的查询语言:HQL,能 够将用户编写的QL转化为相应的。

Mapreduce程序基于Hadoop执行。Hive是Facebook 2008年8月刚开源的一个数据仓库框架,其系统目标与 Pig 有相似之处,但它有一些Pig目前还不支持的机制,比如:更丰富的类型系统、更类似SQL的查询语言、Table/Partition元数据的持久化等。并提供一种HQL语言进行查询,具有扩展性好、延展性好、高容错等特点,多应用于离线数仓建设。

Apache hive 原理架构图

1、架构介绍

存储:Hive底层存储依赖于hdfs,因此也支持hdfs所支持的数据存储格式,如text、json、parquet等。当我们将一个文件映射为Hive中一张表时,只需在建表时告诉Hive,数据中的列名、列分隔符、行分隔符等,Hive就可以自动解析数据。

支持多种压缩格式:bzip2、gzip、lzo、snappy等。通常采用parquet+snappy格式存储。支持计算引擎:原生支持引擎为MapReduce。但也支持其他计算引擎,如Spark、Tez。

元数据存储:derby是Hive内置的元数据存储库,但是derby并发性能差且目前不支持多会话。实际生产中,更多的是采用mysql为Hive的元数据存储库。

  • 内嵌模式:元数据保持在内嵌的Derby模式,只允许一个会话连接
  • 本地独立模式:在本地安装Mysql,把元数据放到Mysql内
  • 远程模式:元数据放置在远程的Mysql数据库。

HQL语句执行:解析器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在hdfs中,并在随后转化为MapReduce任务执行。

2、hwi(hive web interface)

hive web接口启动:./hive –service hwi

浏览器访问:http://localhost:9999/hwi/
默认情况下,Hive元数据保存在内嵌的 Derby 数据库中,只能允许一个会话连接,只适合简单的测试。为了支持多用户多会话,则需要一个独立的元数据库,我们使用 MySQL 作为元数据库,Hive 内部对 MySQL 提供了很好的支持。

3、Hive的数据放在哪儿?

数据在HDFS的warehouse目录下,一个表对应一个子目录。本地的/tmp目录存放日志和执行计划

4、hive的表分为两种,内表和外表。

Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。 在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。

5、使用Mysql作为Hive metaStore的存储数据库

表名说明关联键
TBLS所有hive表的基本信息(表名,创建时间,所属者等)TBL_ID,SD_ID
TABLE_PARAM表级属性,(如是否外部表,表注释,最后修改时间等)TBL_ID
COLUMNSHive表字段信息(字段注释,字段名,字段类型,字段序号)SD_ID
SDS所有hive表、表分区所对应的hdfs数据目录和数据格式SD_ID,SERDE_ID
SERDE_PARAM序列化反序列化信息,如行分隔符、列分隔符、NULL的表示字符等SERDE_ID
PARTITIONSHive表分区信息(所属表,分区值)PART_ID,SD_ID,TBL_ID
PARTITION_KEYSHive分区表分区键(即分区字段)TBL_ID
PARTITION_KEY_VALSHive表分区名(键值)PART_ID
hive metddata store in mysql