数据集成工具:Teiid实践

数据集成是把不同来源、格式、特点性质的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享。数据集成的方式多种多样,这里介绍的 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 选项,如下图:

img

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

img

2.导入 MyQL 数据源

在 Guides 界面,选择 JDBC 数据源

img

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

img

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

img

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

img

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

img

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

img

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

img

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

3.导入 FlatFile 数据源(CSV)

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

img

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

img

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

img

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

img

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

img

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

img

4.导入 xml 数据

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

img

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

现在整个项目如下图:

img

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

结果如图:

img

posted @ 2013-11-06 01:16  biaobiaoqi  阅读(1068)  评论(0编辑  收藏  举报