通过 AWS Schema Conversion Tool 使用扩展包
AWS SCT 扩展包是一个附加模块,用于模拟源数据库中存在的函数,这些函数在将对象转换为目标数据库时是必需的。您需要先转换数据库架构,然后再安装 AWS SCT 扩展包。
每个 AWS SCT 扩展包中包含以下组件:
数据库架构:包括用于模拟某些联机事务处理 (OLTP) 和联机分析处理 (OLAP) 数据库对象(例如序列)的 SQL 函数、过程和表。此外,还可以模拟源数据库不支持的内置函数。此架构名称采用以下格式:
aws_
。database_engine_name
_extAWS Lambda 函数(针对某些 OLTP 数据库):包含用于模拟作业调度和电子邮件发送等复杂数据库功能的 AWS Lambda 函数。
OLAP 数据库的自定义库:包括一组 Java 和 Python 库,可用于将 Microsoft SQL Server Integration Services(SSIS)提取、转换和加载(ETL)脚本迁移到 AWS Glue 或 AWS Glue Studio。
Java 库包括以下模块:
spark-excel_2.11-0.13.1.jar
:模拟 Excel 源组件和目标组件的功能。spark-xml_2.11-0.9.0.jar
、poi-ooxml-schemas-4.1.2.jar
和xmlbeans-3.1.0.jar
:模拟 XML 源组件的功能。
Python 库包括以下模块。
sct_utils.py
:模拟源数据类型并准备 Spark SQL 查询参数。ssis_datetime.py
:模拟日期和时间内置函数。ssis_null.py
:模拟ISNULL
和REPLACENULL
内置函数。ssis_string.py
:模拟字符串内置函数。
有关这些库的更多信息,请参阅为 AWS SCT 扩展包使用自定义库。
您可以通过以下两种方式应用 AWS SCT 扩展包:
在应用目标数据库脚本时,通过从上下文菜单中选择应用于数据库,AWS SCT 可以自动应用扩展包。AWS SCT 在应用所有其他架构对象之前应用扩展包。
要手动应用扩展包,请选择目标数据库,然后从上下文菜单中选择应用扩展包。对于大多数情况,自动应用已足够。但是,如果意外删除了扩展包,则可能需要手动应用该包。
每次将 AWS SCT 扩展包应用于目标数据存储时,组件都会被覆盖,且 AWS SCT 显示有关此问题的通知。要关闭这些通知,请选择设置、全局设置、通知,然后选择隐藏扩展包更换提醒。
要从 Microsoft SQL Server 转换到 PostgreSQL,您可以使用 AWS SCT 中的 SQL Server 到 PostgreSQL 扩展包。此扩展包模拟 SQL Server 代理和 SQL Server 数据库邮件。有关更多信息,请参阅使用扩展包在 PostgreSQL 中模拟 SQL Server Agent 和使用扩展包在 PostgreSQL 中模拟 SQL Server 数据库邮件。
接下来,您可以找到有关使用 AWS SCT 扩展包的更多信息。
AWS SCT 扩展包使用权限
Amazon Aurora AWS SCT 扩展包使用 AWS Lambda 函数模拟邮件发送、作业调度、排队和其他操作。将 AWS SCT 扩展包应用于目标 Aurora 数据库时,AWS SCT 会创建一个新 AWS Identity and Access Management(IAM)角色和内联 IAM 策略。接下来,AWS SCT 创建一个新的 Lambda 函数,并配置 Aurora 数据库集群以实现 AWS Lambda 出站连接。要运行这些操作,请确保向 IAM 用户授予以下必需权限:
iam:CreateRole
:为 AWS 账户创建新的 IAM 角色。iam:CreatePolicy
:为 AWS 账户创建新的 IAM 策略。iam:AttachRolePolicy
:将指定策略附加到 IAM 角色。iam:PutRolePolicy
:更新嵌入在 IAM 角色中的内联策略文档。iam:PassRole
:将指定的 IAM 角色传递给规则引擎。iam:TagRole
:将标签添加到 IAM 角色。iam:TagPolicy
:将标签添加到 IAM 策略中。lambda:ListFunctions
:查看您的 Lambda 函数列表。lambda:ListTags
:查看您的 Lambda 函数的标签列表。lambda:CreateFunction
:新建 Lambda 函数。rds:AddRoleToDBCluster
:将 IAM 角色与您的 Aurora 数据库集群关联。
Amazon Redshift AWS SCT 扩展包模拟了将转换后的对象应用到 Amazon Redshift 时所需的源数据仓库基础函数。在将转换后的代码应用于 Amazon Redshift 之前,必须应用 Amazon Redshift 的扩展包。为此,请将 iam:SimulatePrincipalPolicy
操作包含在 IAM 策略中。
AWS SCT 使用 IAM Policy Simulator 检查安装 Amazon Redshift 扩展包所需的权限。即使您已正确配置 IAM 用户, IAM Policy Simulator 也会显示错误消息。这是 IAM Policy Simulator 的已知问题。此外,当 IAM 策略中没有 iam:SimulatePrincipalPolicy
操作时, IAM Policy Simulator 会显示一条错误消息。在这些情况下,您可以忽略错误消息,使用扩展包向导应用扩展包。有关更多信息,请参阅 应用扩展包。
使用扩展包架构
转换数据库或数据仓库架构时,AWS SCT 会向您的目标数据库添加一个额外的架构。该架构用于实现将转换后的架构写入到目标数据库时必需的源数据库的 SQL 系统功能。这个额外的架构称为扩展包架构。
OLTP 数据库的扩展包架构按照源数据库命名,如下所示:
-
Microsoft SQL Server:
AWS_SQLSERVER_EXT
-
MySQL:
AWS_MYSQL_EXT
-
Oracle:
AWS_ORACLE_EXT
-
PostgreSQL:
AWS_POSTGRESQL_EXT
OLAP 数据仓库应用程序的扩展包架构按照源数据存储命名,如下所示:
-
Greenplum:
AWS_GREENPLUM_EXT
-
Microsoft SQL Server:
AWS_SQLSERVER_EXT
-
Netezza:
AWS_NETEZZA_EXT
-
Oracle:
AWS_ORACLE_EXT
-
Teradata:
AWS_TERADATA_EXT
-
Vertica:
AWS_VERTICA_EXT
为 AWS SCT 扩展包使用自定义库
在某些情况下,AWS SCT 无法将源数据库功能转换为等效的目标数据库功能。相关 AWS SCT 扩展包包含自定义库,这些库可模拟目标数据库上的一些源数据库功能。
如果您要转换事务型数据库,请参阅 使用 AWS SCT 扩展包中的 AWS Lambda 函数 。
应用扩展包
您可以使用扩展包向导或在将转换后的代码应用于目标数据库时应用 AWS SCT 扩展包。
使用扩展包向导应用扩展包
-
在 AWS Schema Conversion Tool 的目标数据库树中,打开上下文(右键单击)菜单,选择应用扩展包,然后选择源数据库平台。
扩展包向导随即出现。
-
查看 Welcome 页面,然后选择 Next。
-
在 AWS 配置文件页面上,执行以下操作。
-
如果您只要重新安装扩展包架构,则选择 Skip this step for now,然后选择 Next。暂时跳过此步骤选项仅适用于联机事务处理(OLTP)数据库。
-
如果您要上传新库,则提供凭证以连接到您的 AWS 账户。仅在转换 OLAP 数据库或 ETL 脚本时使用此步骤。如果您已安装 AWS CLI,则可以使用 AWS Command Line Interface(AWS CLI)凭证。您也可以使用之前存储在全局应用程序设置的配置文件中且与项目关联的凭证。如有必要,请选择导航到全局设置,配置并将其他配置文件与 AWS SCT 项目关联。有关更多信息,请参阅 在 AWS Schema Conversion Tool 中管理配置文件。
-
-
如果您要上传新库,请在库上传页面上选择我需要上传库。仅在转换 OLAP 数据库或 ETL 脚本时使用此步骤。接下来,提供 Amazon S3 路径,然后选择将库上传到 S3。
如果您已经上传了库,请在库上传页面上选择我已经上传了库,使用我现有 S3 存储桶。接下来,提供 Amazon S3 路径。
完成后,选择 Next 。
-
在函数模拟页面上,选择创建扩展包。此时显示包含扩展包操作状态的消息。
完成后,选择 Finish。
在应用转换后的代码时应用扩展包
-
在 AWS 服务配置文件中,指定 Amazon S3 存储桶。仅在转换 OLAP 数据库或 ETL 脚本时使用此步骤。有关更多信息,请参阅 在 AWS Schema Conversion Tool 中管理配置文件。
确保 Amazon S3 存储桶策略包含以下权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["*"] }, { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": ["*"] }, { "Effect": "Allow", "Action": ["iam:SimulatePrincipalPolicy"], "Resource": ["*"] }, { "Effect": "Allow", "Action": ["iam:GetUser"], "Resource": ["arn:aws:iam::
111122223333:user/DataExtractionAgentName
"] } ] }在前面的示例中,将
111122223333:user/DataExtractionAgentName
替换为 IAM 用户名称。 -
转换源数据仓库架构。有关更多信息,请参阅 转换数据仓库架构。
-
在右窗格中,选择转换后的架构。
-
打开架构元素的上下文 (右键单击) 菜单,然后选择 Apply to database。
-
AWS SCT 生成包含所需组件的扩展包,并将
aws_
架构添加到目标树中。接下来,AWS SCT 将转换后的代码和扩展包架构应用于目标数据仓库。database_engine_name
_ext将 Amazon Redshift 和 AWS Glue 作为目标数据库平台组合使用时,AWS SCT 会在扩展包中添加一个额外的架构。
使用 AWS SCT 扩展包中的 AWS Lambda 函数
AWS SCT 提供包含 Lambda 函数的扩展包,这些函数为 Amazon EC2 上托管的数据库提供电子邮件、作业调度和其他功能。
使用 AWS Lambda 函数模拟数据库功能
在某些情况下,数据库功能无法转换为等效的 Amazon RDS 功能。例如,Oracle 发送使用 UTL_SMTP
的电子邮件调用,Microsoft SQL Server 可以使用作业计划程序。如果您在 Amazon EC2 上托管并自行管理数据库,则可通过替代 AWS 服务来模拟这些功能。
AWS SCT 扩展包向导可帮助您安装、创建和配置 Lambda 函数,以模拟电子邮件、作业调度和其他功能。
应用扩展包支持 Lambda 函数
您可以使用扩展包向导或在将转换后的代码应用于目标数据库时应用扩展包支持 Lambda 函数。
重要
AWS 服务模拟功能仅适用于 Amazon EC2 上安装和自管理的数据库。如果目标数据库位于 Amazon RDS 数据库实例上,请勿安装服务模拟功能。
使用扩展包向导应用扩展包
-
在 AWS Schema Conversion Tool 的目标数据库树中,打开上下文(右键单击)菜单,选择应用扩展包,然后选择源数据库平台。
扩展包向导随即出现。
-
查看 Welcome 页面,然后选择 Next。
-
在 AWS 配置文件页面上,执行以下操作。
-
如果您只要重新安装扩展包架构,则选择 Skip this step for now,然后选择 Next。
-
如果您正在安装 AWS 服务,请提供凭证以连接到 AWS 账户。如果您已安装 AWS CLI,则可以使用 AWS CLI 凭证。您也可以使用之前存储在全局应用程序设置的配置文件中且与项目关联的凭证。如有必要,请选择 Navigate to Project Settings,将一个不同的配置文件与项目关联。如有必要,请选择 Global Settings 以创建新的配置文件。有关更多信息,请参阅 在 AWS Schema Conversion Tool 中管理配置文件。
-
-
在 Email Sending Service 页面上,执行以下操作:
-
如果您只要重新安装扩展包架构,则选择 Skip this step for now,然后选择 Next。
-
如果您正在安装 AWS 服务且已有 Lambda 函数,则可提供该函数。否则,向导将为您创建该函数。完成后,选择 Next 。
-
-
在 Job Emulation Service 页面上,执行以下操作:
-
如果您只要重新安装扩展包架构,则选择 Skip this step for now,然后选择 Next。
-
如果您正在安装 AWS 服务且已有 Lambda 函数,则可提供该函数。否则,向导将为您创建该函数。完成后,选择 Next 。
-
-
在函数模拟页面上,选择创建扩展包。此时显示包含扩展包操作状态的消息。
完成后,选择 Finish。
注意
要更新扩展包并覆盖旧的扩展包组件,请确保使用最新版本的 AWS SCT。有关更多信息,请参阅 安装和配置 AWS Schema Conversion Tool。
为 AWS SCT 扩展包配置函数
扩展包包含在使用前必须配置的函数。常量 CONVERSION_LANG
定义服务包使用的语言。这些函数适用于英语和德语。
要将语言设置为英语或德语,请在函数代码中进行以下更改。找到以下常量声明:
CONVERSION_LANG CONSTANT VARCHAR := '';
要将 CONVERSION_LANG
设置为英语,请将该行更改为以下内容:
CONVERSION_LANG CONSTANT VARCHAR := 'English';
要将 CONVERSION_LANG
设置为英语,请将该行更改为以下内容:
CONVERSION_LANG CONSTANT VARCHAR := 'Deutsch';
为以下函数设置此设置:
aws_sqlserver_ext.conv_datetime_to_string
aws_sqlserver_ext.conv_date_to_string
aws_sqlserver_ext.conv_string_to_date
aws_sqlserver_ext.conv_string_to_datetime
aws_sqlserver_ext.conv_string_to_datetime
aws_sqlserver_ext.parse_to_date
aws_sqlserver_ext.parse_to_datetime
aws_sqlserver_ext.parse_to_time