数据集成是把不同来源、格式、特点性质的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享。数据集成的方式多种多样,这里介绍的 Teiid 是其中的一种:通过抽象和联邦技术,实现分布式数据源的实时数据访问和集成,无需从记录系统中复制或移动数据。

链接是一篇关于 Teiid 的中文介绍,比较详细。

由于适配不同数据源和生成虚拟数据库(VDB)需要维护好几个配置文件,直接手动部署 Teiid 比较难受。好在 Teiid 提供了辅助工具 Teiid Designer,这是一个 Eclipse 插件,能帮助用户可视化的管理数据的集成过程。

  • 安装配置

    参见官网的 Downloads 界面的详细介绍(注意:环境配置中,各组件需严格遵循官网指定版本,实践经验表明,Teiid 本身并不够鲁棒,容不得小差错)。

接下来,我们用一个简单的应用场景实践 Teiid 的数据集成功能。

应用场景

书店主营图书销售,并维护者一个用户对图书评价的数据库。技术上说,书店拥有三个数据模块:

  • MySQL 数据库,存储用户信息和用户对某书的评价

    表结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
create database library;
use library;
create table users (
id int primary key,
name char(20) not null,
passwd char(20)) not null,
);
create table comments(
cid int primary key,
uid int ,
bookid int not null,
content char(255),
foreign key (uid) references users(id)
);
  • EXCEL 表格,店主用于记录销售量、记录销售单价
1
2
3
4
5
6
book_id,price,sales
1,89.00,1000
2,52.00,9999
3,30.00,10000
4,9800,5555
5,69.00,1234
  • XML 文件记录书籍信息,包括
1
2
3
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
<?xml version= "1.0" encoding ="UTF-8"?>
<BooksInfo>
<Book id = "1" >
<Title> Hadoop: The Definitive Guide </Title>
<Author> Tom White</Author >
<publisher> O'Reilly</ publisher>
</Book>
<Book id = "2" >
<Title> Effective Java</Title >
<Autorh> Joshua Bloch</Autorh>
<publisher> HZ Books</ publisher>
</Book>
<Book id = "3" >
<Title> C Programming Language</Title >
<Autorh> Kernighan, Ritchie </Autorh>
<publisher> HZ Books</ publisher>
</Book>
<Book id = "4" >
<Title> Head First: Design Pattern</Title >
<Autorh> Freeman</ Autorh>
<publisher> Turning Education</publisher >
</Book>
<Book id = "5" >
<Title> Refactoring: Improving the Design of Existing Code </Title>
<Autorh> Martin Fowler </Autorh>
<publisher> O'Reilly</ publisher>
</Book>
</BooksInfo>

实践

1.创建工程

打开配置好 Teiid Designer 插件的 Eclipse,在 Teiid Designer 视图的 Guides 中,找到 Define Teiid Model Project 选项,如下图:

一路点击 next,在如下界面勾选 sources 和 views 即可,designer guid 会帮助生成这两个目录,其他目录在此项目中不需要。

2.导入 MyQL 数据源

在 Guides 界面,选择 JDBC 数据源

第一个步骤 Define Teiid Model Project 在上一步中已经完成了,现在需要创建一个 JDBC 链接,选择 Create JDBC connection,在弹出的窗口中,选择 Mysql 数据库,然后点下一步

选择 mysql 驱动,配置好 Mysql 数据源的的 url、用户名、密码,点下一步。(在这里,mysql 的端口为默认的 3306,library 为之前配置好的 mysql 数据库)。点击 test connection 测试与 mysql 的链接能否建立。

接下来需要给数据源创建源模型(source model)了。同样在 Guides 试图上双击 Create source model for JDBC data source,一路下一步,直到选择数据库和表,选择 library 数据库中的所有表,如下图:

创建源模型的最后一步如下图,可以自定义 Model Name,为了让之后的 sql 查询过程更可读,我将以数据源类型命名它(mysql.xmi)。其他无关配置暂时不用理会。

finish 后,就生成了一个元模型,如下图。图中可视化的显示了数据库所建的两张表

接下来可以测试数据是否可读,双击 Guides 中的 Preview Data,在弹框中选择需要 preview 的表或者 precedure(procedure 在本工程里这里不会被用到)查询结果显示在了 eclipse 下方的 SQL Result 框中,如下图:

接下先来不用着急 Define VDB,我们先把所有数据源配置完成后再一起来定义虚拟数据库。

3.导入 FlatFile 数据源(CSV)

跟之前一个步骤一样,只需要沿着 Guides 里的路线一步一步操作。

首先创建连接,配置好后 test connection 确保链接无误

链接建立后,需要创建元模型。如下图,提示有错,只需要选定 Source Model Definition 的文件的存储位置即可。存放在项目的 sources 目录中

按照默认配置,不断下一步,在 Flat File Demilited Columns Parser Settings 这一步,可以注意到下方有生成一串 SQL 语句。这些语句告诉 Teiid 需要如何将 csv 文件中的数据映射为关系型数据。

继续下一步,view model definition 界面,提示创建的 tableview 名字包含不合法字符。原来由于将 flat file 命名为 sales.csv,它自动生成了 price.csvView 作为 table name,但名字中是不能出现.的,于是修改为 salesview,finish。

之后测试数据能否读取。在选择所要 preview 的数据时,需要选择相应的 table,而不是模型(这里需要选择 salesView,而不是上层的 price_view.xmi)。如下图:

4.导入 xml 数据

大部分步骤跟之前的步骤类似,在设定源模型时,需要注意配置好 xml 数据到关系型数据的映射关系,如下图:

XML File Contents 中会根据 xml 文件中的数据解析出整体的层次结构。我们需要将其中的 Book 里的信息,添加到右边的 Column Info 中。虽然有很多 Book 数据列表显示在左边一栏里,但实际上只需要添加一次相关信息到右边的列信息中。值得注意的是,这里自动生成的 Root Path 是错误的,需要修改为 BooksInfo/Book。其他没有什么特别的,一路下一步。

现在整个项目如下图:

5.生成虚拟数据库

点击 Guides 中的 Define VDB,将三个数据源的模型加入到 VDB 中:MySQL 的源模型,XML 和 CSV 的视图模型(注意:不可以加入另外两个源模型的 xmi 文件,博主如此操作后遇到了一些莫名其妙的问题)。

如此就完成了在 Teiid Designer 中的多数据源集成的配置了。

6.部署和使用

通过 Teiid Designer,我们能方便的部署 VDB 到 Jboss 服务器。

在 Guides 界面下,有 execute vdb 选项,双击即可。正式运行之前,需要运行 Jboss server,如果没有启动服务器,Teiid Designer 会弹框提醒的。

最后,尝试一下通过 Teiid 集成查询多个数据源。将 sql 语句输入到执行框中,刷蓝->右键->执行选中的语句。

1
> select * from "csv"."sales" as A join "xml"."booksinfo" as B on A.book_id = B.id

结果如图:

 原文地址:http://biaobiaoqi.me/blog/2013/10/19/data-integration-tool-teiid/
 版权声明:自由转载-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0

数据集成工具:Teiid实践的更多相关文章

  1. 数据集成工具Teiid Designer的环境搭建

    由于实验室项目要求的关系,看了些数据汇聚工具 Teiid 的相关知识.这里总结下 Teiid 的可视化配置工具 Teiid Designer 的部署过程. 背景知识 数据集成是把不同来源.格式.特点性 ...

  2. 数据集成工具Kettle、Sqoop、DataX的比较

    数据集成工具很多,下面是几个使用比较多的开源工具. 1.阿里开源软件:DataX         DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).H ...

  3. 数据集成工具—Sqoop

    数据集成/采集/同步工具 @ 目录 数据集成/采集/同步工具 Sqoop简介 Sqoop安装 1.上传并解压 2.修改文件夹名字 3.修改配置文件 4.修改环境变量 5.添加MySQL连接驱动 6.测 ...

  4. 数据集成工具—FlinkX

    @ 目录 FlinkX的安装与简单使用 FlinkX的安装 FlinkX的简单使用 读取mysql中student表中数据 FlinkX本地运行 MySQLToHDFS MySQLToHive MyS ...

  5. 【ODI】| 数据ETL:从零开始使用Oracle ODI完成数据集成(一)

    0. 环境说明及软件准备 ODI(Oracle Data Integrator)是Oracle公司提供的一种数据集成工具,能高效地实现批量数据的抽取.转换和加载.ODI可以实现当今大多数的主流关系型数 ...

  6. 打造实时数据集成平台——DataPipeline基于Kafka Connect的应用实践

    导读:传统ETL方案让企业难以承受数据集成之重,基于Kafka Connect构建的新型实时数据集成平台被寄予厚望. 在4月21日的Kafka Beijing Meetup第四场活动上,DataPip ...

  7. 阿里云DataWorks实践:数据集成+数据开发

    简介 什么是DataWorks: DataWorks(数据工场,原大数据开发套件)是阿里云重要的PaaS(Platform-as-a-Service)平台产品,为您提供数据集成.数据开发.数据地图.数 ...

  8. 字节跳动流式数据集成基于Flink Checkpoint两阶段提交的实践和优化

    背景 字节跳动开发套件数据集成团队(DTS ,Data Transmission Service)在字节跳动内基于 Flink 实现了流批一体的数据集成服务.其中一个典型场景是 Kafka/ByteM ...

  9. DataPipeline在大数据平台的数据流实践

    文 | 吕鹏 DataPipeline架构师 进入大数据时代,实时作业有着越来越重要的地位.本文将从以下几个部分进行讲解DataPipeline在大数据平台的实时数据流实践. 一.企业级数据面临的主要 ...

随机推荐

  1. 将html转换为word文档的几种方式

    1 基于wps直接将页面信息下载成word文档 public void test() { WPS.Application wps = null; try { wps = new WPS.Applica ...

  2. Sass(SCSS)中文手册——入门

    简书原文 https://www.jianshu.com/p/e82c27aa05c7 前言 该中文手册是我在Sass中文文档的基础上编辑的,或者也可以理解为就是Sass中文文档的翻版.之所以有这篇文 ...

  3. 源码笔记---MBProgressHUD

    前言 作为初学者,想要快速提高自己的水平,阅读一些优秀的第三方源代码是一个非常好的途径.通过看别人的代码,可以学习不一样的编程思路,了解一些没有接触过的类和方法. MBProgressHUD是一个非常 ...

  4. java.util.logging使用笔记2

      java.util.logging是java自带的日志处理系统,其功能不如log4j/logback强大,但可以完成基本的日志需求. 另外,如果在一个项目中使用log4j, 而这个项目引用的第3方 ...

  5. js模仿块级作用域(js没有块级作用域私有作用域)

    js模仿块级作用域(js没有块级作用域私有作用域) 一.总结 1.js没有块级作用域:在for循环中定义的i,出了for循环还是有这个i变量 2.js可以模拟块级作用域:用立即执行的匿名函数:(匿名函 ...

  6. 微信端 h5 视频 video 自动播放

    document.addEventListener("WeixinJSBridgeReady",function(){ document.getElementById(" ...

  7. outlook vba 2

  8. Satisfying memory ordering requirements between partial reads and non-snoop accesses

    A method and apparatus for preserving memory ordering in a cache coherent link based interconnect in ...

  9. [Pug] Template Engine -- Jade/ Pug

    Looking at the follow code: .wrapper - const upName = name && name.toUpperCase(); h2 | Hello ...

  10. UVALive - 3977 Summits (BFS染色)

    题目大意:坑爹的题目.题意那么难理解. 讲的就是,假设该点是山顶的话(高度为h).那么以该点为中心,往外辐射.走高度大于h-d的点,到达不了还有一个比它高的点 这就提示了,高度要从大到小排序,依次以高 ...