TALEND WEBINAR : March 27th, 2018 | Step-by-Step to Enterprise Data Integration

如何将数据从本地迁移至云端:Amazon S3

如何将数据从本地迁移至云端:Amazon S3

  • Eric Higaki
    Eric Higaki joined Talend in 2017 as an Associate Evangelist. In this role, Eric works on the community team to provide technical support and brand awareness. Prior to Talend, Eric worked on the Integration team at the largest protein producing company in the world, while also studying at Colorado State University. Go Rams!
  • March 15, 2018

迁移至云端

2018 年是云计算之年,随着越来越多的公司转向云技术,了解自身业务如何充分利用云计算十分重要。企业目前面临的最大问题之一是将数据从本地数据库迁移至云端存储。如果没有正确的工具,这一过程可能冗长而繁琐。所幸有 Talend 助您一臂之力。

在 TALEND,曾经需要把我们的本地MySQL数据库迁移到云端 Amazon S3。相比处理 Apache Sqoop 的复杂操作,我决定在 Talend 内部创建一项作业,在需要将新数据迁移至云端时可立即运行。使用此方法可以为我节省大量宝贵时间,让我可以更从容的分析新迁移数据。在这篇博客中,我将回顾如何构建这项作业。闲言少叙,我们下面进入正题。

创建连接

与任何 Talend 作业一样,要做的第一件事就是创建连接。我用的是 MySQL 数据库,所以我要用到 tMysqlConnection 组件,此外要使用 tS3Connection。创建与 S3 云端存储的连接。由于每次运行此作业时都要首先连接到 MySQL 和 S3,我们还需要在这两个组件之前添加 tPrejob

别忘了 Talend 是一种代码生成工具,通过使用 tPrejob,我可以控制始终先编译的内容,确保始终连接到数据库。配置两个连接组件后,即可将 tPrejob、tMysqlConnection 和 tS3Connection 连接在一起,如下方屏幕截图所示。

获取表并设置动态模式

现在我已连接两个存储平台,可以启动从 MySQL 到 Amazon S3 的云端迁移过程。首先,我需要获取想从数据库中迁移的所有表的列表。使用 tMysqlTableList 可以通过“WHERE 子句”指定要列出的表,不过在本例中只需提取与客户相关的表。

获得希望传输的所有表列表后,下一步是获取该表中各列的列表。

使用“tMysql”全局变量是从组件中提取值的绝佳方法。这些全局变量可从“tMysql”组件中提取数据以供其他组件使用。在本例中,该组件借助“((String)globalMap.get(“tMysqlTableList_1_CURRENT_TABLE”))”,从 tMysqlTableList 组件收集的表中提取列。 Talend 可以轻松检索全局变量,因此不必费心记忆。我所要做的就是键入“tMysql”,按 Ctrl + 空格,所有“tMysql”全局变量将出现在一个列表中,可在其中选择所需的变量。

接下来,我需要添加一个 tFixedFlowInput 来生成“tableName”和“columnName”列。如果首先为这些列配置模式,则这些值将仅显示在 tFixedFlowInput 组件中。设置模式后,可以设置这些列的值,将((String)globalMap.get(“tMysqlTAbleList_1_CURRENT_TABLE”)) 用于“tableName”,((String)globalMap.get(“tMysqlTAbleList_1_COLUMN_NAME”)) 用于“columnName”。

在固定流之后添加 tLogRow,将可以在运行控制台上显示信息,供我查看自己的作业正在提取的表和列的名称。以下是此时的作业最新屏幕截图。

接下来要设置从本地数据库中提取数据时将使用的动态模式。顾名思义,动态模式是一种模式类型,会随着当时正在读取的列而变化,因此对于作业十分重要。

设置动态模式,我将使用名为 tSetDynamicSchema的独特组件。除了名称别具一格,tSetDynamicSchema 还可以让我根据 “columnName” 的值动态地设置模式。由于采用动态模式,无需单独迁移每个表,而是可以轻松迁移多个不同的表。

读取数据及写入表

利用动态模式集,可以使用从 tSetDynamicSchema 组件创建的动态类型,随时开始读取表数据。因为正在从本地数据库中读取数据,接下来我要使用可从 MySQL 数据库读取的组件,即 tMysqlInput。首先我需要编辑 tMysqlInput 组件的模式,以便使用动态数据库 (DB) 类型。我将此模式的列命名为“dynamic_row”,类型为“Dynamic”(当然),数据库类型为“VARCHAR”。

设置模式后,可以继续配置 tMysqlInput 组件,确保从 tMysqlTableList 列出的当前表中提取数据。

现在正从列出的当前表中读取表中数据,不过数据仍需写入 CSV 文件。为完成这项任务,我将使用 tFileOutputDelimited。我需要确保“文件名”遵循正确的文件路径。

好!别着急,马上就好。我创建的作业截至目前的最新状态如下图所示。

将文件移至 Amazon S3

到目前为止,此作业将读取名为 customer 的所有表,并将它们写入到指定文件夹的 CSV 文件中。现在可从位于本地数据库里的表中提取数据,我需要将这些文件移至 Amazon S3,进而完成作业。

我可以使用 tFileList 获取指定文件夹中所有文件的列表,或者在本例中,获取从本地数据库中提取的所有表的列表。接下来只需指定文件所在目录即可。

取得所有文件的列表后,可以开始将其移至我的一个 S3 存储段中。可以通过 tS3Put 组件来实现。我只需要指定“存储段”(Bucket)、“密钥”(Key) 和“文件”(File)。“密钥”是 S3 中文件的名称,“文件”是要上载到 S3 的文件的名称。

至此 tFileList 和 tS3Put 配置已告完成,剩下要做的就是对云端迁移作业进行最后的修改。还记得我在作业开始时打开的那些连接吗?借助 tPostjob、tMysqlClose 和 tS3Close,我可以关闭每次运行作业时打开的连接。像之前一样,我希望能够控制主循环编译后发生的事项,因此使用 tPostjob 组件。简单易行!完成的作业大致就是这样。

运行作业

如果作业已运行并且所有内容都处于最佳状态,则运行控制台应与下方屏幕截图一致。如您所见,控制台显示正在读取和写入的表,以及相应的列名称。

现在作业已完成,我可以将想要的任何表从本地数据库移动到云端存储,而无需为每个表构建多个作业,也不用摆弄颇为麻烦的手动编码。面向云计算,感觉成竹在胸。

观看实时演示

想要观看实时演示吗?不妨于 3 月 22 日(星期四)在 Talend 的 Facebook 页面通过 #TalendDevLive 与我们互动。我将逐步完成上述作业,并在此过程中回答您的问题。不要错过哦!

Join The Conversation

0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *