数据提取和加载
案例说明
ETL 过程的第一步就是从一个或多个数据源获取数据,数据抽取是一个艰难的工作,因为数据源是多 样和复杂的。在传统的数据仓库环境下,数据通常来源于企业的事务类应用系统,如财务系统或 ERP 系统。大部分这类系统都是把数据存储在关系数据库中,如 MySQL 、Oracle 或 SQL Server。抽取一般要从业务的角度来抽取,这也是一个挑战,从技术上来看,最好能使用 JDBC 直接连接数据库。但如果数据库不是关系型的或者没有可用的驱动,数据抽取就会更有挑战性。在这种情况下,一般就需要使用逗号分隔的文本文件来获取数据。还有一种情况就是数据属于其他人,可能是某个供应商或客户的数据,数据位于公司防火墙之外。在这种情况下,不可能直连,使用文本文件交换数据是唯一选择。如果数据位于互联网上,文本文件也不能使用。在ETL项目里还应重视数据特征,它描述了数据的基本结构,它是数据的一组统计信息,能从总体上了解数据内容和数据质量。本案例将讲述 Uniplore 中几种抽取数据的组件以及 Uniplore 如何支持不同的CDC(Change Data Capture)技术。
数据准备
建表脚本: etl_test_input.sql etl_test_output.sql
数据:etl_test_input.txt 本案例中“从数据库中读取数据”小节将使用此数据;
足球比赛数据:usa_201209.txt 本案例中“从文本文件中读取数据”小节将使用此数据;
购房者信息数据:custinfo.xlsx 本案例中“从Excel中读取数据”小节将使用此数据;
建表脚本:create_products.sql
数据:productlist_LUX_200908.txt 本案例中“向数据库中插入数据”小节将使用此数据;
本案例中“创建参数查询”、“基于时间戳的CDC”和“基于快照的CDC”三个小节将利用 Sakila 数据库中的 custmor 表和 cdc_time 表,Sakila 是 MySQL 中的一个示例数据库(sample database),提供了一个标准的方案,可用于自学,写书,教程,文章以及示例等。详细介绍请参考 Sakila数据集介绍 。关于Sakila数据库,读者亦可参考相关的官方文档。 sakila-db.zip
从数据库中读取数据
在进行本小节前,需要提前在数据库建好对应的表。将计算【start_date】与【end_date】字段之间所间隔的天数,并根据所隔天数来设定字段【performance】的值。通过“表输入”组件从数据库中读取数据后,使用“字段选择”组件可以保留所需字段。然后在“计算器”组件中新建【diff_date】字段用于计算日期间隔。计算好间隔天数,在通过“数值范围”组件设置【performance】字段的 值,其中【performance】字段为“数值范围”组件产生的新的输出字段。具体操作如下: 1、新建转换,拖拽表输入组件至画布,双击组件,在弹出的对话框中选择在Uniplore中保存好的数据库连接,单击获取SQL查询语句,在对应的文本框中即可获得对应表的查询。当然,也可以在文本框中编写自定义SQL查询语句。配置如下图所示:
2、配置好表输入组件后,选中该组件,右击并选中**“预览”**查看数据。结果如下图所示:
3、将“**字段选择”**组件拖至画布,并建立从“**表输入”**到“**字段选择”**的连接。双击“字段选择”,点击右键“获取选着字段”,配置如下图所示:
4、拖拽**“计算器”组件至画布,并建立从“字段选择”到“计算器”之间的连接(在弹出的提示框中选择“主输出步骤”),右键“插入”,双击填写新字段信息,“计算器”**组件配置如下图所示:
5、拖拽**“数值范围”组件至画布,建立从“计算器”到“数值范围”之间的连接,“数值范围”**配置如下图所示:
6、拖拽**“表输出”组件至画布,建立从“数值范围”到“表输出”之间的连接,“表输出”**配置如下图所示:
7、完成所有步骤后,整个转换视图如下图所示:
8、点击画布左上角**“
****”按钮运行转换,并在弹出的提示框中点击“启动”**按钮,即可运行整个转换。结果如下图所示:
运行转换前etl_test_output表:
运行转换后etl_test_output表:
运行结果: