├── README.md ├── 事实表与维度表.md ├── 基本概念.md └── 数据集成 ├── Kafka数据集成.md ├── MSSQL数据集成.md ├── MySQL数据集成.md ├── Oracle数据集成.md ├── 功能特点.md ├── 数据源列表.md └── 架构原理.md /README.md: -------------------------------------------------------------------------------- 1 | # datasphere-docs 2 | DataSphere 产品文档 3 | -------------------------------------------------------------------------------- /事实表与维度表.md: -------------------------------------------------------------------------------- 1 | ## 事实表与维度表 2 | 3 | 4 | 5 | ### 一致性维度和事实 6 | DataSphere 建立了全局一致性的维度和事实,而不是为每个系统建立维度和事实。 7 | 8 | 9 | 10 | ### 一致性维度 11 | 具有一致的维度关键字,一致的属性列名称,一致的属性定义和一致的属性值。一致性维度要么是统一的,要么是维度表的一个子集。 12 | 13 | ### 一致性事实 14 | 每个度量在整个DataSphere中都是唯一的统计口径,为了避免歧义,一个度量只有唯一的业务术语。 15 | 16 | ### 如何区分事实表和维度表 17 | 通常来讲,一般把能够分类的属性单独列出来,成为维度表,不可分类的数据保留在事实表中,在事实表中维护事实与维度的引用关系。 18 | 19 | -------------------------------------------------------------------------------- /基本概念.md: -------------------------------------------------------------------------------- 1 | ## 基本概念 2 | 3 | 在正式学习使用DataSphere前,您需要理解以下基本概念。 4 | 5 | ### 业务板块 6 | 定义数据仓库的名称和业务空间,以企业内一个相对独立的业务为分配单元。例如,如果业务涉及零售、文娱,且系统间相对独立,则需要构建两个业务板块,即零售、文娱。如果业务仅涉及零售,且业务内的系统间隔离较少,则只需要构建一个业务板块,即零售。 7 | 8 | ### 公共定义 9 | 定义企业构建数据所需的全局概念对象或参数,以保证全局概念统一。当定义完成后,系统内其他指标(例如派生指标)可以按需统一、通用化引用这些对象,例如统计周期。 10 | 11 | ### 项目管理 12 | 项目是一种物理空间上的划分。项目管理,即用户在数据中台建设过程中,对物理资源及开发人员进行隔离化管理。一个业务板块可以包含多个项目,每个系统成员可以加入多个不同的项目。 13 | 14 | ### 物理数据源 15 | 存储数据的物理数据库即物理数据源。物理数据源可以作为数据同步传输的上游数据来源,也可以作为数据同步传输的目标数据存储介质。 16 | 17 | ### 维度 18 | 维度即进行统计的对象。通常情况下,维度是实际存在、不因事件发生就存在的实体。创建维度,即从顶层规范业务中的实体(主数据),并保证实体的唯一性。 19 | 20 | ### 业务过程 21 | 业务过程即业务活动中的所有事件。创建业务过程,即从顶层规范业务中事务内容的类型及唯一性。 22 | 23 | ### 维度逻辑表 24 | 维度逻辑表与维度一一对应,是通过丰富维度中的属性信息构建形成的。创建维度逻辑表,即完成公共对象明细数据设计及加工处理,从而便于提取业务中对象的明细数据。 25 | 26 | ### 事实逻辑表 27 | 事实逻辑表与业务过程对应,是通过丰富业务过程的属性及度量信息构建形成的。创建事实逻辑表,即完成公共事务明细数据设计及加工处理,从而便于提取业务中事务的明细数据。 28 | 29 | ### 业务限定 30 | 统计的业务范围,筛选出符合业务规则的记录(类似于SQL中where后的条件,不包括时间区间)。 31 | 32 | ### 指标 33 | 指标分为原子指标和派生指标。 34 | 35 | 原子指标:对指标统计口径(即计算逻辑)、具体算法的一个抽象,例如支付金额。 36 | 派生指标:业务中常用的统计指标。派生指标=原子指标+业务限定+统计周期+统计粒度。例如,自然周、会员、采用优惠券支付的订单。 37 | 38 | ### 统计粒度 39 | 统计分析的对象或视角,定义数据需要汇总的程度,可以理解为聚合运算时的分组条件(类似于SQL中group by的对象)。粒度是维度的一个组合,指明您的统计范围。例如,某个指标是某个卖家在某个省份的成交额,则粒度就是卖家、省份这两个维度的组合。 40 | -------------------------------------------------------------------------------- /数据集成/Kafka数据集成.md: -------------------------------------------------------------------------------- 1 | ### Kafka数据集成介绍 2 | ____________________________ 3 | 4 | #### MySQL同步到Kafka 5 | ____________________________ 6 | 7 | * 配置 Kafka 队列集群服务 8 | 9 | 1. 输入命令 cd Kafka/bin,进入到 Integration 服务器的kafka的bin目录。 10 | 11 | 2. 进入到 bin 目录后可以看到如下的 Kafka 服务启动脚本。 12 | 13 | 14 | * 启动 Zookeeper 服务 15 | 16 | 1. sudo ./zookeeper-server-start.sh ../config/zookeeper.properties 17 | 18 | 2. 执行此命令后,可以看到 Zookeeper 服务正常启动成功。 19 | 20 | 3. zookeeper 服务启动后,再启动 Kafka Server。 21 | 22 | 23 | * 启动 Kafka Server服务 24 | 25 | 1. 在server.properties文件中,设置zookeeper 连接地址 26 | 27 | 2. sudo ./kafka-server-start.sh ../config/server.properties 28 | 29 | 3. 执行此命令后,可以看到 Kafka服务正常启动成功 30 | 31 | 32 | * 启动 Kafka Consumer服务 33 | 34 | 1. 在config 目录中修改 consumer.properties中的zookeeper 连接地址 35 | 36 | 2. 进入到在 Integration/Kafka/bin目录下, 输入如下命令 37 | sudo ./kafka-console-consumer.sh --topic mysqlstream --zookeeper 127.0.0.1:2181 --from-beginning 38 | 其中 kafka 的 topic 名称为 mysqlstream 。 39 | 40 | 41 | * 配置MySQL 到 Kafka 同步任务 42 | 43 | 1. 选择适配处理器为 KafkaWriter 44 | 45 | 2. 设置主题为 mysqltopic(此主题与Kafka消费者主题保持一致) 46 | 47 | 3. 设置代理器地址为 Kafka 服务器地址127.0.0.1:9092 48 | 49 | 4. 设置 Kafka 配置为retry.backoff.ms=10000 50 | 51 | 5. 选择格式化处理器为DSVFormatter 52 | 53 | 54 | * 启动MySQL到Kafka的数据同步任务 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /数据集成/MSSQL数据集成.md: -------------------------------------------------------------------------------- 1 | ### MSSQL数据集成介绍 2 | ____________________________ 3 | 4 | #### MSSQL同步到MySQL 5 | ____________________________ 6 | 7 | * 配置数据库源端 8 | 9 | 1. 选择MSSQL数据库作为源端数据库 10 | 2. 为数据源命名: MSSQLSource 11 | 3. 选择处理器: MSSQLReader 12 | 4. 填写源端数据库的用户名: myuser 13 | 5. 填写连接数据库的 JDBC 驱动 URL: 192.168.0.1:1433 14 | 6. 填写数据库需要同步的表: dbo.mytable 15 | 7. 填写源端数据库的密码:******* 16 | 17 | * 配置数据库目标端 18 | 19 | 1. 选择输入流为:MSSQLStream 20 | 2. 选择处理器: DatabaseWriter 21 | 3. 为数据目标命名: HashdataTarget 22 | 4. 填写目标数据库的用户名: root 23 | 5. 填写连接目标数据库的 JDBC 驱动 URL: 192.168.0.2:3306/mydb 24 | 6. 填写目标数据库的表清单: dbo.mytable,ROOT.TEST; 25 | 7. 填写目标数据库的密码:******* 26 | 8. 根据你的需要设置同步参数: 27 | 28 | > 批量策略: EventCount:1,Interval:0 29 | 30 | 31 | #### MSSQL同步到PostgreSQL 32 | ____________________________ 33 | 34 | * 配置数据库源端 35 | 36 | 1. 选择MSSQL数据库作为源端数据库 37 | 2. 为数据源命名: MSSQLSource 38 | 3. 选择处理器: MSSQLReader 39 | 4. 填写源端数据库的用户名: myuser 40 | 5. 填写连接数据库的 JDBC 驱动 URL: 192.168.0.1:1433 41 | 6. 填写数据库需要同步的表: dbo.mytable 42 | 7. 填写源端数据库的密码:******* 43 | 44 | 45 | * 配置数据库目标端 46 | 47 | 1. 选择输入流为:MSSQLSource 48 | 2. 选择处理器: DatabaseWriter 49 | 3. 为数据目标命名: PostgreSQLTarget 50 | 4. 填写目标数据库的用户名: root 51 | 5. 填写连接目标数据库的 JDBC 驱动 URL: jdbc:postgresql://192.168.0.2:5432/postgres 52 | 6. 填写目标数据库的表清单: dbo.mytable,POSTGRES.TEST; 53 | 7. 填写目标数据库的密码:******* 54 | 8. 根据你的需要设置同步参数: 55 | 56 | > 批量策略: EventCount:1,Interval:0 57 | 58 | 59 | 60 | 61 | 62 | #### MSSQL同步到Hashdata 63 | ____________________________ 64 | 65 | * 配置数据库源端 66 | 67 | 1. 选择MSSQL数据库作为源端数据库 68 | 2. 为数据源命名: MSSQLSource 69 | 3. 选择处理器: MSSQLReader 70 | 4. 填写源端数据库的用户名: myuser 71 | 5. 填写连接数据库的 JDBC 驱动 URL: 192.168.0.1:1433 72 | 6. 填写数据库需要同步的表: dbo.mytable 73 | 7. 填写源端数据库的密码:******* 74 | 75 | 76 | * 配置数据库目标端 77 | 78 | 1. 选择输入流为:MSSQLSource 79 | 2. 选择处理器: DatabaseWriter 80 | 3. 为数据目标命名: HashdataTarget 81 | 4. 填写目标数据库的用户名: gpadmin 82 | 5. 填写连接目标数据库的 JDBC 驱动 URL: jdbc:postgresql://192.168.0.2:5432/gpadmin 83 | 6. 填写目标数据库的表清单: dbo.mytable,GPADMIN.TEST; 84 | 7. 填写目标数据库的密码:******* 85 | 8. 根据你的需要设置同步参数: 86 | 87 | > 批量策略: EventCount:1,Interval:0 88 | 89 | 90 | #### MSSQL同步到Hive 91 | ____________________________ 92 | 93 | * 配置数据库源端 94 | 95 | 1. 选择MSSQL数据库作为源端数据库 96 | 2. 为数据源命名: MSSQLSource 97 | 3. 选择处理器: MSSQLReader 98 | 4. 填写源端数据库的用户名: myuser 99 | 5. 填写连接数据库的 JDBC 驱动 URL: 192.168.0.1:1433 100 | 6. 填写数据库需要同步的表: dbo.mytable 101 | 7. 填写源端数据库的密码:******* 102 | 103 | 104 | * 配置数据库目标端 105 | 106 | 1. 选择输入流为:MSSQLSource 107 | 2. 选择处理器: HiveWriter 108 | 3. 为数据目标命名: HiveTarget 109 | 4. 填写目标数据库的用户名: 110 | 5. 填写连接目标数据库的 JDBC 驱动 URL: jdbc:hive2://192.168.0.2:10000/hive 111 | 6. 填写目标数据库的表清单: dbo.mytable,HIVE.TEST; 112 | 7. 填写目标数据库的密码:******* 113 | 8. 根据你的需要设置同步参数: 114 | 115 | > 批量策略: EventCount:1,Interval:0 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /数据集成/MySQL数据集成.md: -------------------------------------------------------------------------------- 1 | ### MySQL数据集成介绍 2 | ____________________________ 3 | 4 | #### MySQL同步到MySQL 5 | ____________________________ 6 | 7 | * 配置数据库源端 8 | 9 | 1. 选择MySQL数据库作为源端数据库 10 | 2. 为数据源命名: MySQLSource 11 | 3. 选择处理器: MySQLReader 12 | 4. 填写源端数据库的用户名: root 13 | 5. 填写连接数据库的 JDBC 驱动 URL: 192.168.0.1:3306:mydb 14 | 6. 填写数据库需要同步的表: ROOT.TEST 15 | 7. 填写源端数据库的密码:******* 16 | 17 | * 配置数据库目标端 18 | 19 | 1. 选择输入流为:MySQLStream 20 | 2. 选择处理器: DatabaseWriter 21 | 3. 为数据目标命名: HashdataTarget 22 | 4. 填写目标数据库的用户名: root 23 | 5. 填写连接目标数据库的 JDBC 驱动 URL: 192.168.0.2:3306/mydb 24 | 6. 填写目标数据库的表清单: ROOT.TEST,ROOT.TEST; 25 | 7. 填写目标数据库的密码:******* 26 | 8. 根据你的需要设置同步参数: 27 | 28 | > 批量策略: EventCount:1,Interval:0 29 | 30 | 31 | #### MySQL同步到PostgreSQL 32 | ____________________________ 33 | 34 | * 配置数据库源端 35 | 36 | 1. 选择MySQL数据库作为源端数据库 37 | 2. 为数据源命名: MySQLSource 38 | 3. 选择处理器: MySQLReader 39 | 4. 填写源端数据库的用户名: root 40 | 5. 填写连接数据库的 JDBC 驱动 URL: 192.168.0.1:3306:mydb 41 | 6. 填写数据库需要同步的表: ROOT.TEST 42 | 7. 填写源端数据库的密码:******* 43 | 44 | 45 | * 配置数据库目标端 46 | 47 | 1. 选择输入流为:MySQLStream 48 | 2. 选择处理器: DatabaseWriter 49 | 3. 为数据目标命名: PostgreSQLTarget 50 | 4. 填写目标数据库的用户名: root 51 | 5. 填写连接目标数据库的 JDBC 驱动 URL: jdbc:postgresql://192.168.0.2:5432/postgres 52 | 6. 填写目标数据库的表清单: ROOT.TEST,POSTGRES.TEST; 53 | 7. 填写目标数据库的密码:******* 54 | 8. 根据你的需要设置同步参数: 55 | 56 | > 批量策略: EventCount:1,Interval:0 57 | 58 | 59 | 60 | 61 | 62 | #### MySQL同步到Hashdata 63 | ____________________________ 64 | 65 | * 配置数据库源端 66 | 67 | 1. 选择MySQL数据库作为源端数据库 68 | 2. 为数据源命名: MySQLSource 69 | 3. 选择处理器: MySQLReader 70 | 4. 填写源端数据库的用户名: root 71 | 5. 填写连接数据库的 JDBC 驱动 URL: 192.168.0.1:3306:mydb 72 | 6. 填写数据库需要同步的表: ROOT.TEST 73 | 7. 填写源端数据库的密码:******* 74 | 75 | 76 | * 配置数据库目标端 77 | 78 | 1. 选择输入流为:MySQLStream 79 | 2. 选择处理器: DatabaseWriter 80 | 3. 为数据目标命名: HashdataTarget 81 | 4. 填写目标数据库的用户名: gpadmin 82 | 5. 填写连接目标数据库的 JDBC 驱动 URL: jdbc:postgresql://192.168.0.2:5432/gpadmin 83 | 6. 填写目标数据库的表清单: ROOT.TEST,GPADMIN.TEST; 84 | 7. 填写目标数据库的密码:******* 85 | 8. 根据你的需要设置同步参数: 86 | 87 | > 批量策略: EventCount:1,Interval:0 88 | 89 | 90 | #### MySQL同步到Hive 91 | ____________________________ 92 | 93 | * 配置数据库源端 94 | 95 | 1. 选择MySQL数据库作为源端数据库 96 | 2. 为数据源命名: MySQLSource 97 | 3. 选择处理器: MySQLReader 98 | 4. 填写源端数据库的用户名: root 99 | 5. 填写连接数据库的 JDBC 驱动 URL: 192.168.0.1:3306:mydb 100 | 6. 填写数据库需要同步的表: ROOT.TEST 101 | 7. 填写源端数据库的密码:******* 102 | 103 | 104 | * 配置数据库目标端 105 | 106 | 1. 选择输入流为:MySQLStream 107 | 2. 选择处理器: HiveWriter 108 | 3. 为数据目标命名: HiveTarget 109 | 4. 填写目标数据库的用户名: 110 | 5. 填写连接目标数据库的 JDBC 驱动 URL: jdbc:hive2://192.168.0.2:10000/hive 111 | 6. 填写目标数据库的表清单: ROOT.TEST,HIVE.TEST; 112 | 7. 填写目标数据库的密码:******* 113 | 8. 根据你的需要设置同步参数: 114 | 115 | > 批量策略: EventCount:1,Interval:0 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /数据集成/Oracle数据集成.md: -------------------------------------------------------------------------------- 1 | ### Oracle数据集成介绍 2 | ____________________________ 3 | 4 | 5 | #### Oracle同步到MySQL 6 | ____________________________ 7 | 8 | * 配置数据库源端 9 | 10 | 1. 选择Oracle数据库作为源端数据库 11 | 2. 为数据源命名: OracleSource 12 | 3. 选择处理器: OracleReader 13 | 4. 填写源端数据库的用户名: scott 14 | 5. 填写连接数据库的 JDBC 驱动 URL: 192.168.0.1:1521:orcl 15 | 6. 填写数据库需要同步的表: SCOTT.TEST 16 | 7. 填写源端数据库的密码:******* 17 | 18 | * 配置数据库目标端 19 | 20 | 1. 选择输入流为:OracleStream 21 | 2. 选择处理器: DatabaseWriter 22 | 3. 为数据目标命名: HashdataTarget 23 | 4. 填写目标数据库的用户名: root 24 | 5. 填写连接目标数据库的 JDBC 驱动 URL: 192.168.0.1:3306/mydb 25 | 6. 填写目标数据库的表清单: SCOTT.TEST,ROOT.TEST; 26 | 7. 填写目标数据库的密码:******* 27 | 8. 根据你的需要设置同步参数: 28 | 29 | > 批量策略: EventCount:1,Interval:0 30 | 31 | 32 | #### Oracle同步到PostgreSQL 33 | ____________________________ 34 | 35 | * 配置数据库源端 36 | 37 | 1. 选择Oracle数据库作为源端数据库 38 | 2. 为数据源命名: OracleSource 39 | 3. 选择处理器: OracleReader 40 | 4. 填写源端数据库的用户名: scott 41 | 5. 填写连接数据库的 JDBC 驱动 URL: 192.168.0.1:1521:orcl 42 | 6. 填写数据库需要同步的表: SCOTT.TEST 43 | 7. 填写源端数据库的密码:******* 44 | 45 | * 配置数据库目标端 46 | 47 | 1. 选择输入流为:OracleStream 48 | 2. 选择处理器: DatabaseWriter 49 | 3. 为数据目标命名: PostgreSQLTarget 50 | 4. 填写目标数据库的用户名: root 51 | 5. 填写连接目标数据库的 JDBC 驱动 URL: jdbc:postgresql://192.168.0.2:5432/postgres 52 | 6. 填写目标数据库的表清单: SCOTT.TEST,POSTGRES.TEST; 53 | 7. 填写目标数据库的密码:******* 54 | 8. 根据你的需要设置同步参数: 55 | 56 | > 批量策略: EventCount:1,Interval:0 57 | 58 | 59 | 60 | 61 | 62 | #### Oracle同步到Hashdata 63 | ____________________________ 64 | 65 | * 配置数据库源端 66 | 67 | 1. 选择Oracle数据库作为源端数据库 68 | 2. 为数据源命名: OracleSource 69 | 3. 选择处理器: OracleReader 70 | 4. 填写源端数据库的用户名: scott 71 | 5. 填写连接数据库的 JDBC 驱动 URL: 192.168.0.1:1521:orcl 72 | 6. 填写数据库需要同步的表: SCOTT.TEST 73 | 7. 填写源端数据库的密码:******* 74 | 75 | * 配置数据库目标端 76 | 77 | 1. 选择输入流为:OracleStream 78 | 2. 选择处理器: DatabaseWriter 79 | 3. 为数据目标命名: HashdataTarget 80 | 4. 填写目标数据库的用户名: gpadmin 81 | 5. 填写连接目标数据库的 JDBC 驱动 URL: jdbc:postgresql://192.168.0.2:5432/gpadmin 82 | 6. 填写目标数据库的表清单: SCOTT.TEST,GPADMIN.TEST; 83 | 7. 填写目标数据库的密码:******* 84 | 8. 根据你的需要设置同步参数: 85 | 86 | > 批量策略: EventCount:1,Interval:0 87 | 88 | 89 | #### Oracle同步到Hive 90 | ____________________________ 91 | 92 | * 配置数据库源端 93 | 94 | 1. 选择Oracle数据库作为源端数据库 95 | 2. 为数据源命名: OracleSource 96 | 3. 选择处理器: OracleReader 97 | 4. 填写源端数据库的用户名: scott 98 | 5. 填写连接数据库的 JDBC 驱动 URL: 192.168.0.1:1521:orcl 99 | 6. 填写数据库需要同步的表: SCOTT.TEST 100 | 7. 填写源端数据库的密码:******* 101 | 102 | * 配置数据库目标端 103 | 104 | 1. 选择输入流为:OracleStream 105 | 2. 选择处理器: HiveWriter 106 | 3. 为数据目标命名: HiveTarget 107 | 4. 填写目标数据库的用户名: 108 | 5. 填写连接目标数据库的 JDBC 驱动 URL: jdbc:hive2://192.168.0.2:10000/hive 109 | 6. 填写目标数据库的表清单: SCOTT.TEST,HIVE.TEST; 110 | 7. 填写目标数据库的密码:******* 111 | 8. 根据你的需要设置同步参数: 112 | 113 | > 批量策略: EventCount:1,Interval:0 114 | 115 | 116 | -------------------------------------------------------------------------------- /数据集成/功能特点.md: -------------------------------------------------------------------------------- 1 | ### 多种数据源支持 2 | Integration 平台支持的数据源包括Oracle、MySQL、MSSQL、TiDB、Teradata、PostgreSQL、Hashdata、Greenplum、HDFS、HBase、Kafka、JMS、ZeroMQ、ActiveMQ、 Memcached、Redis、Hazelcast、FTP、Log、TXT 等各种异构数据源。 3 | 4 | ### 内存级流数据处理 5 | 6 | DataSphere Integration 基于内存级流处理组件构建,能够对高速流数据和消息进行持续地采集、 处理和分析。Integration 内置了Hazelcast等分布式内存计算平台,可对流入的数据进行实时计算、算法处理和CQ持续查询。Integration平台也集成了Spark、Flink等 实时计算平台,可进行内存级迭代计算,更加丰富了在大数据整个生态系统环境下的功能完善性。 7 | 8 | 9 | ### 异构数据实时同步 10 | Integration 平台可作为数据实时同步平台,从数据源端实时读取数据(Reader),向目标端实时写入数据(Writer)插件,Integration 已经支持了大量的数据源类型。在数据流实时处理平台内,用户可以进行各种类型的面向大数据分析的建模、分析、处理工作。Integration 平台可作为传统IT系统到大数据无缝切换的集成平台, 可实现传统IT系统和 Hadoop 生态环境中数据互联互通。 11 | 12 | 13 | ### 摄入和回放数据流 14 | Integration 平台内置Kafka消息组件,用户能够轻松地使用 Kafka 摄入和备份数据流。 15 | 16 | 17 | 18 | ### 数据库云容灾备份 19 | Integration 平台支持主流的数据库(Oracle,MSSQL,MySQL)的增量采集数据,可将数据同步到其他数据库或Hadoop平台。包括从主流数据库中实时采集数据发送给目标端数据源,当数据在流动过程当中,针对数据流可进行过滤、转换、聚合等操作。 20 | 21 | ### 数据上云迁移 22 | 目前有很多企业逐渐采用混合云架构,可以将传统IT架构中的数据库中的数据实时、无损地迁移至云端,如阿里云、腾讯云、百度云、华为云、金山云、UCloud、青云等。 23 | 24 | -------------------------------------------------------------------------------- /数据集成/数据源列表.md: -------------------------------------------------------------------------------- 1 | 2 | | 数据端名称 | 数据源端 | 数据目标端 | 开源 | 3 | |-------------|:------:|-----------|----------:| 4 | | Oracle | √ | √ | √ | 5 | | MSSQL | √ | √ | √ | 6 | | PostgreSQL | √ | √ | √ | 7 | | TiDB | √ | √ | √ | 8 | | Hashdata | √ | √ | √ | 9 | | Greenplum | √ | √ | √ | 10 | | Clickhouse | √ | √ | √ | 11 | | Apache Hive | √ | √ | √ | 12 | | Apache HAWQ | √ | √ | √ | 13 | | Apache HBase| √ | √ | √ | 14 | | Apache HDFS | √ | √ | √ | 15 | | Apache Kafka| √ | √ | √ | 16 | | Apache Spark| √ | √ | √ | 17 | | Apache Flink| √ | √ | √ | 18 | | MQTT | √ | √ | √ | 19 | | JMS | √ | √ | √ | 20 | 21 | 22 | -------------------------------------------------------------------------------- /数据集成/架构原理.md: -------------------------------------------------------------------------------- 1 | ## Integration 平台架构原理 2 | 3 | 数据和元数据都是源服务器的一部分。事务日志读取器位于 Integration 服务器上,基于数据行和日志的过滤和压缩在 Integration 服务器上运行。 4 | 在初始化加载过程中,Integration 服务器读取一个经过过滤的行数据流, 将它们传递给转换进程进行进一步处理,然后将结果写入到目标数据源中。 5 | CDC 进程获得一个经过过滤的事件、数据增量或事务日志文件的元数据。在转发到目标数据源之前,缓存所有的数据更新。在初始化加载过程中,发生在事务处理中,CDC也缓存所有的更新,直到所有受影响的表都被加载完毕。 6 | 7 | ### 数据同步形式 8 | 9 | #### 单数据同步任务 10 | 每个实例的表同步活动都由一个同步任务组成。我们使用图形可视化在操作面板上以拖拽的方式完成任务的创建。在定义一个任务时需指定: 11 | ①源数据库和目标数据库 12 | ②待同步的源表和目标表 13 | 14 | 当一个任务被定义完成,你可以部署、运行这个任务。Integration 平台激活CDC数据处理,自动从源表采集数据,并加载到目标表。使用操作面板上,你可以停止、重启这个同步任务,也可以对这个任务的执行过程进行监控。 15 | 16 | #### 多数据同步任务并行执行 17 | 可以一次定义和执行多个数据同步任务,多个任务之间相互独立运行,没有影响。 18 | 多任务适用于以下数据同步场景: 19 | ①有多个源数据库和目标数据库 20 | ②有多个源表和目标表 21 | ③有相同的源表,但有不同的数据抽取条件 22 | 23 | 24 | #### 全量加载和CDC增量加载进程 25 | 全量加载进程在目标数据库端创建一个文件或者表,不像 CDC 进程,全量加载进程一次性加载整个表或文件的数据。 26 | 源表主要在加载过程中用来更新活动,然而并不需要在源端停止处理进程。只要加载进程启动,Integration 平台会自动开始CDC进程,直到整个表加载完毕,才将增量数据更新到目标端。因为在全量加载过程中进行增量更新可能会导致数据不一致的情况发生。而在加载过程中,Integration 平台保证了目标端数据的一致性和完整性。 27 | 如果加载进程出现故障问题而中断,当重启时,它将继续执行加载处理。 28 | 你能够添加一个新表到现有的目标端,而不需要重新加载现有的表。同时,能够更新多个不同的目标表。 29 | CDC进程从源数据库端采集增量数据或元数据,以实时地方式将增量数据写入到目标端。CDC进程采集和应用变更数据以单个提交事务为基本单元,这也保证了在目标数据库端的事务完整性问题。只要数据加载进程启用,CDC将为文件或目标表进行处理。 30 | CDC通过读取源端数据库的Redo日志文件,对于每个事务处理,进一步组合数据条目。如果CDC进程在一定的时间内没有将数据更新到目标数据库,它将把数据持久化到Kafka服务器中,不需要重新读取源端的DBMS log日志,这样避免了重复工作,节约了大量的时间。 31 | 32 | ①全量加载(以Hashdata为例) 33 | 全量加载被用于在目标端创建一个全新的数据仓库,从源端数据库表全量并发加载数据。高速数据抽取通过源端数据库进行初始化, 然后gpfdist和缓存加载文件用于高速加载数据进入 Hashdata,下图是全量加载数据到 Hashdata 数据仓库的架构 34 | 35 | 36 | 首次运行全量加载数据到 Hashdata 目标表是将需要同步的数据写成CSV文件,并放到文件夹下。CSV文件顺序命名, 例如loadNNNN, NNNN 是从0开始的递增号。 37 | CSV文件的最大大小自己设置。当CSV文件达到最大大小时,它就重命名,并拷贝到加载文件夹。然后通过gpfdist工具进行读取,执行一个 SQL 语句来加载数据到目标表。一旦文件加载完成,则文件将被删除。 38 | ②增量加载 39 | 对于增量数据加载, Integration 平台使用了基于日志的CDC采集的方式.在CDC同步过程中, Integration 解析从源数据库采集的SQL语句, 提取SQL中的数据值, 重新拼装SQL语句, 创建了一个外表用来执行SQL语句到目标表。下图展示了增量加载数据到 Hashdata 数据仓库的整体架构 40 | 41 | 追加更新到目标数据库 42 | 事务追加模式: 43 | 在这个模式下,Hashdata 数据仓库写入所有的更新记录到 CSV 文件作为 DML 语句。当一个文件准备好后,Hashdata 数据仓库创建一个外表,使用 gpfdist 服务器从文件读取变更量,然后执行文件中的 DML语句。当变更追加完后,删除文件。 44 | 批量追加模式: 45 | 在这个模式下,Hashdata 数据仓库仅仅把增量数据写入到 CSV 文件中。当一个文件准备好后,Hashdata 数据创建一个外表,使用 gpdist 服务器从文件中读取增量数据到临时表。然后增量数据被追加到目标表。当执行完毕后,文件被删除。 46 | 47 | ### 数据同步方式 48 | #### 一对一同步 49 | 在一对一拓扑中,有一个源端数据库和一个目标端数据库。当源端和目标端是唯一的,Hashdata 将保证事务的一致性和完整性。 50 | #### 一对多同步 51 | 一对多拓扑中,有一个源端数据库和多个目标端数据库。Integration 平台在创建任务时,可以添加多个目标数据端到任务,一个数据源端可以将数据发送给多个目标端数据库。 52 | 多对一拓扑中,有多个源端数据库和一个目标端数据库。Integration 平台在创建任务时,可以添加多个数据源端到任务,多个数据源的数据是独立同步,互相不影响。数据流通过增强和中间层处理可以合并后写入到目标数据库。 53 | 一对多和多对一拓扑被称为星型拓扑,一般不允许循环和多路径传播数据更新。星型拓扑是非循环的有向图。 54 | --------------------------------------------------------------------------------