本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
DMS 架构转换中的转换规则
转换规则允许您自定义 DMS 架构转换如何转换数据库对象,覆盖默认命名和数据类型映射。您可以将这些规则应用于数据库、架构、表、视图、列、函数返回值、例程参数和局部变量。
例如,假定您的源架构中有一组名为 test_TABLE_NAME 的表。您可以设置一条规则,将前缀 test_ 在目标架构中更改为前缀 demo_。
您可以创建执行以下任务的转换规则:
-
添加、删除或替换前缀
-
添加、删除或替换后缀
-
更改列、函数返回值、例程参数或局部变量的数据类型
-
将对象名称转换为小写或大写
-
重命名对象
创建转换规则
DMS 架构转换将转换规则存储为迁移项目的一部分。要定义转换规则,请在创建或修改迁移项目时将其作为 JSON 字符串传递,该字符串包含带有rules数组的对象。数组中的每个元素代表一个单独的规则对象。一个迁移项目最多支持 512 条转换规则(最大 128 KB)。
带有转换规则的数组结构如下:
{ "rules": [ {Rule object 1}, {Rule object 2}, ... {Rule object N} ] }
您可以在项目中添加多个转换规则。在转换过程中,DMS 架构转换应用转换规则的顺序与规则的添加顺序相同。
如果多个规则针对同一个对象,则行为取决于操作类型。具有不同操作类型的规则都会生效。例如,一条add-prefix规则和一条add-suffix规则都适用。具有相同操作类型的规则会相互覆盖,只有最后一个规则生效。
要创建转换规则,请使用以下方法之一。
要编辑、复制或移除现有的转换规则,请参阅编辑转换规则。
检索转换规则
您可以使用 Amazon 管理控制台或 Amazon CLI 从现有 DMS 架构转换迁移项目中检索转换规则。
编辑转换规则
要在迁移项目中编辑、添加或移除转换规则,请使用以下方法之一。
转换规则格式
转换规则使用 JSON 对象字段来定义如何将源对象转换为其等效目标对象。每种规则类型都使用一组特定的字段。仅包含适用于您的任务的字段。
以下 JSON 对象描述了 DMS 架构转换转换规则:
{ "rule-type": "transformation", "rule-id":rule_id, "rule-name": "rule_name", "rule-action": "rule_action", "rule-target": "rule_target", "object-locator": { [ "database-name": "database_name", ] [ "schema-name": "schema_name", ] [ "table-name": "table_name", ] [ "column-name": "column_name", ] [ "parent": "parent_name", ] [ "function-name": "function_name", ] [ "procedure-name": "procedure_name", ] [ "parameter-name": "parameter_name", ] [ "local-variable-name": "local_variable_name", ] [ "type": "source_data_type", ] [ "precision":source_precision, ] [ "scale":source_scale, ] [ "length":source_length] }, [ "value": "rule_value", ] [ "old-value": "rule_old_value", ] [ "data-type": { "type": "data_type_name", [ "precision":data_type_precision, ] [ "scale":data_type_scale, ] [ "length":data_type_length] } ] }
下表描述了每个参数。
| 参数 | 可能的值 | 说明 |
|---|---|---|
rule-type |
transformation |
将规则应用于对象定位器指定的每个对象的值。 对于所有转换规则,请将其设置为 必需的参数。 |
rule-id |
一个数字(整数)值。 | 一个用于标识规则的唯一数字值。 必需的参数。 |
rule-name |
一个字母数字值。 | 一个用于标识规则的唯一名称。 必需的参数。 |
rule-action |
add-prefix, remove-prefix,
replace-prefix, add-suffix,
remove-suffix, replace-suffix,
convert-uppercase,
convert-lowercase, rename,
change-data-type |
要应用于对象的转换。所有转换规则操作都区分大小写。 前缀操作:
后缀操作:
大小写转换:
直接修改:
范围:可以对架构、表和列应用前缀、后缀、重命名和大小写转换操作。 该 必需的参数。 |
rule-target |
database, schema,
table, view,
column, function result,
routine parameter, local
variable |
要应用规则的对象的类型。
必需的参数。 |
object-locator |
一个 JSON 对象。 | 用于标识规则适用于哪些源数据库对象的对象。您可以将百分号 ( 该对象包含以下字符串字段:
转换规则中的所有对象名称(例如表名或列名)都区分大小写。 以下各节描述了每个对象字段。 必需的参数。 |
object-locator | database-name |
遵循源数据库命名规则的字母数字值。 | 源数据库的名称。 适用于数据库供应商,其数据库架构源自作为对象顶级容器的数据库。例如:微软 SQL Server、SAP ASE。 可选的 JSON 对象字段。 |
object-locator | schema-name |
遵循源数据库命名规则的字母数字值。 | 源数据库架构的名称。 可选的 JSON 对象字段。 |
object-locator | table-name |
遵循源数据库命名规则的字母数字值。 | 源数据库表的名称。 可选的 JSON 对象字段。 |
object-locator | column-name |
遵循源数据库命名规则的字母数字值。 | 源数据库表列的名称。 可选的 JSON 对象字段。 |
object-locator | parent |
遵循源数据库命名规则的字母数字值。 | 源数据库对象的名称,该对象是指定对象的父对象,例如,表示 在某些供应商的数据库中,应用规则的对象可能是从属对象,需要指定其父对象。 例如,Oracle 中的封装函数,其中父函数是软件包名称。 可选的 JSON 对象字段。 |
object-locator | function-name |
遵循源数据库命名规则的字母数字值。 | 源数据库函数的名称。 可选的 JSON 对象字段。 |
object-locator | procedure-name |
遵循源数据库命名规则的字母数字值。 | 源数据库过程的名称。 可选的 JSON 对象字段。 |
object-locator | parameter-name |
遵循源数据库命名规则的字母数字值。 | 源数据库函数或过程参数的名称。 可选的 JSON 对象字段。 |
object-locator | local-variable-name |
遵循源数据库命名规则的字母数字值。 | 源数据库函数或过程中的局部变量的名称。 可选的 JSON 对象字段。 |
object-locator | type |
一个字母数字值。 | 要匹配的源数据类型名称。使用此字段仅将规则应用于具有特定数据类型的对象。 可选的 JSON 对象字段。 |
object-locator | precision |
一个数字(整数)值。 | 要匹配的源数据类型的精度。 可选的 JSON 对象字段。 |
object-locator | scale |
一个数字(整数)值。 | 要匹配的源数据类型的比例。 可选的 JSON 对象字段。 |
object-locator | length |
一个数字(整数)值。 | 要匹配的源数据类型的长度。 可选的 JSON 对象字段。 |
value |
遵循目标数据库命名规则的字母数字值。 | 变换操作使用的文本值。对于 除 |
old-value |
遵循源数据库命名规则的字母数字值。 | 要在对象名称中查找和替换的现有值。对于诸如 可选参数。 |
data-type |
一个 JSON 对象。 | 描述替换数据类型属性的对象(何时 对象包含以下字段:
以下各节描述了每个对象字段。 可选参数。 |
data-type | type |
一个字母数字值。 | 目标数据库列的替换数据类型的名称(如果 必填的 JSON 对象字段。 |
data-type | precision |
一个数字(整数)值。 | 目标数据库的替换数据类型的精度(如果 可选的 JSON 对象字段。 |
data-type | scale |
一个数字(整数)值。 | 目标数据库的替换数据类型的比例(如果 可选的 JSON 对象字段。 |
data-type | length |
一个数字(整数)值。 | 目标数据库的替换数据类型的长度(如果 可选的 JSON 对象字段。 |
转换规则示例
以下示例显示了不同规则类型的--transformation-rules参数的 JSON 值:
以下示例在从源数据库转换为目标数据库时执行这些操作:
-
为架构
DW_添加前缀SALES。 -
ORDERS在架构中FACT_为表添加前缀SALES。 -
在架构中
OLD_为表UNIT_PRICEPRODUCTS中的列添加前缀SALES。
{ "rules": [ { "rule-id": 5, "rule-type": "transformation", "rule-name": "add-prefix-schema-sales", "rule-action": "add-prefix", "rule-target": "schema", "object-locator": { "schema-name": "SALES" }, "value": "DW_" }, { "rule-id": 12, "rule-type": "transformation", "rule-name": "add-prefix-table-orders", "rule-action": "add-prefix", "rule-target": "table", "object-locator": { "schema-name": "SALES", "table-name": "ORDERS" }, "value": "FACT_" }, { "rule-id": 27, "rule-type": "transformation", "rule-name": "add-prefix-column-unit-price", "rule-action": "add-prefix", "rule-target": "column", "object-locator": { "schema-name": "SALES", "table-name": "PRODUCTS", "column-name": "UNIT_PRICE" }, "value": "OLD_" } ] }
以下示例在从源数据库转换为目标数据库时执行这些操作:
-
SRC_从架构中移除前缀SRC_FINANCE。 -
TMP_从架构TMP_INVOICES中的表中删除前缀SRC_FINANCE。 -
PAID_从架构中表PAID_AMOUNTTMP_PAYMENTS的列中删除前缀SRC_FINANCE。
{ "rules": [ { "rule-id": 3, "rule-type": "transformation", "rule-name": "remove-prefix-schema-src-finance", "rule-action": "remove-prefix", "rule-target": "schema", "object-locator": { "schema-name": "SRC_FINANCE" }, "value": "SRC_" }, { "rule-id": 18, "rule-type": "transformation", "rule-name": "remove-prefix-table-tmp-invoices", "rule-action": "remove-prefix", "rule-target": "table", "object-locator": { "schema-name": "SRC_FINANCE", "table-name": "TMP_INVOICES" }, "value": "TMP_" }, { "rule-id": 41, "rule-type": "transformation", "rule-name": "remove-prefix-column-paid-amount", "rule-action": "remove-prefix", "rule-target": "column", "object-locator": { "schema-name": "SRC_FINANCE", "table-name": "TMP_PAYMENTS", "column-name": "PAID_AMOUNT" }, "value": "PAID_" } ] }
以下示例在从源数据库转换为目标数据库时执行这些操作:
-
将前缀
OLD_替换为架构NEW_中的前缀OLD_INVENTORY。 -
将架构
INT_中的表中的前STG_缀替换STG_WAREHOUSES为表中的前缀OLD_INVENTORY。 -
将前缀
SRC_替TGT_换为架构SRC_WAREHOUSE_CODE中表STG_WAREHOUSES中的列OLD_INVENTORY。
{ "rules": [ { "rule-id": 7, "rule-type": "transformation", "rule-name": "replace-prefix-schema-old-inventory", "rule-action": "replace-prefix", "rule-target": "schema", "object-locator": { "schema-name": "OLD_INVENTORY" }, "value": "NEW_", "old-value": "OLD_" }, { "rule-id": 22, "rule-type": "transformation", "rule-name": "replace-prefix-table-stg-warehouses", "rule-action": "replace-prefix", "rule-target": "table", "object-locator": { "schema-name": "OLD_INVENTORY", "table-name": "STG_WAREHOUSES" }, "value": "INT_", "old-value": "STG_" }, { "rule-id": 35, "rule-type": "transformation", "rule-name": "replace-prefix-column-src-warehouse-code", "rule-action": "replace-prefix", "rule-target": "column", "object-locator": { "schema-name": "OLD_INVENTORY", "table-name": "STG_WAREHOUSES", "column-name": "SRC_WAREHOUSE_CODE" }, "value": "TGT_", "old-value": "SRC_" } ] }
以下示例在从源数据库转换为目标数据库时执行这些操作:
-
为架构
_HISTHR_ARCHIVE添加后缀。 -
JOB_CHANGES在架构HR_ARCHIVE中_HIST为表添加后缀。 -
在架构
HR_ARCHIVE中_TS为表CREATED_ATEMPLOYEE_SALARIES中的列添加后缀。
{ "rules": [ { "rule-id": 9, "rule-type": "transformation", "rule-name": "add-suffix-schema-hr-archive", "rule-action": "add-suffix", "rule-target": "schema", "object-locator": { "schema-name": "HR_ARCHIVE" }, "value": "_HIST" }, { "rule-id": 16, "rule-type": "transformation", "rule-name": "add-suffix-table-job-changes", "rule-action": "add-suffix", "rule-target": "table", "object-locator": { "schema-name": "HR_ARCHIVE", "table-name": "JOB_CHANGES" }, "value": "_HIST" }, { "rule-id": 44, "rule-type": "transformation", "rule-name": "add-suffix-column-created-at", "rule-action": "add-suffix", "rule-target": "column", "object-locator": { "schema-name": "HR_ARCHIVE", "table-name": "EMPLOYEE_SALARIES", "column-name": "CREATED_AT" }, "value": "_TS" } ] }
以下示例在从源数据库转换为目标数据库时执行这些操作:
-
_FILES从架构LEGAL_FILES中删除后缀。 -
_V1从架构CLAUSES_V1LEGAL_FILES中的表中删除后缀。 -
_CODE从架构LEGAL_FILES中表的列COUNTRY_CODE中删除后缀CONTRACTS_V1。
{ "rules": [ { "rule-id": 6, "rule-type": "transformation", "rule-name": "remove-suffix-schema-legal-files", "rule-action": "remove-suffix", "rule-target": "schema", "object-locator": { "schema-name": "LEGAL_FILES" }, "value": "_FILES" }, { "rule-id": 14, "rule-type": "transformation", "rule-name": "remove-suffix-table-clauses-v1", "rule-action": "remove-suffix", "rule-target": "table", "object-locator": { "schema-name": "LEGAL_FILES", "table-name": "CLAUSES_V1" }, "value": "_V1" }, { "rule-id": 31, "rule-type": "transformation", "rule-name": "remove-suffix-column-country-code", "rule-action": "remove-suffix", "rule-target": "column", "object-locator": { "schema-name": "LEGAL_FILES", "table-name": "CONTRACTS_V1", "column-name": "COUNTRY_CODE" }, "value": "_CODE" } ] }
以下示例在从源数据库转换为目标数据库时执行这些操作:
-
将后缀替换
_DEV为架构_PRODREPORTING_DEV中。 -
将后缀
_RPT替换为架构_REPORTREPORTING_DEV中的表MONTHLY_RPT中。 -
将后缀
_ID替换_KEY为架构CUSTOMER_IDREPORTING_DEV中表MONTHLY_RPT中的列。
{ "rules": [ { "rule-id": 8, "rule-type": "transformation", "rule-name": "replace-suffix-schema-reporting-dev", "rule-action": "replace-suffix", "rule-target": "schema", "object-locator": { "schema-name": "REPORTING_DEV" }, "value": "_PROD", "old-value": "_DEV" }, { "rule-id": 23, "rule-type": "transformation", "rule-name": "replace-suffix-table-monthly-rpt", "rule-action": "replace-suffix", "rule-target": "table", "object-locator": { "schema-name": "REPORTING_DEV", "table-name": "MONTHLY_RPT" }, "value": "_REPORT", "old-value": "_RPT" }, { "rule-id": 47, "rule-type": "transformation", "rule-name": "replace-suffix-column-customer-id", "rule-action": "replace-suffix", "rule-target": "column", "object-locator": { "schema-name": "REPORTING_DEV", "table-name": "MONTHLY_RPT", "column-name": "CUSTOMER_ID" }, "value": "_KEY", "old-value": "_ID" } ] }
以下示例在从源数据库转换为目标数据库时执行这些操作:
-
将架构名称中的所有字符
CRM_LEGACY转换为大写。 -
将架构中表
CUSTOMER_ACCOUNTS名称中的所有字符CRM_LEGACY转换为大写。 -
将架构中表
CUSTOMER_ACCOUNTS中列名FIRST_NAME中的所有字符CRM_LEGACY转换为大写。
{ "rules": [ { "rule-id": 4, "rule-type": "transformation", "rule-name": "convert-uppercase-schema-crm-legacy", "rule-action": "convert-uppercase", "rule-target": "schema", "object-locator": { "schema-name": "CRM_LEGACY" } }, { "rule-id": 19, "rule-type": "transformation", "rule-name": "convert-uppercase-table-customer-accounts", "rule-action": "convert-uppercase", "rule-target": "table", "object-locator": { "schema-name": "CRM_LEGACY", "table-name": "CUSTOMER_ACCOUNTS" } }, { "rule-id": 36, "rule-type": "transformation", "rule-name": "convert-uppercase-column-first-name", "rule-action": "convert-uppercase", "rule-target": "column", "object-locator": { "schema-name": "CRM_LEGACY", "table-name": "CUSTOMER_ACCOUNTS", "column-name": "FIRST_NAME" } } ] }
以下示例在从源数据库转换为目标数据库时执行这些操作:
-
将架构名称中的所有字符
LOGISTICS转换为小写。 -
将架构中表
SHIPMENT_ORDERS名称中的所有字符LOGISTICS转换为小写。 -
将架构中表
SHIPMENT_ORDERS中列名DESTINATION_CITY中的所有字符LOGISTICS转换为小写。
{ "rules": [ { "rule-id": 11, "rule-type": "transformation", "rule-name": "convert-lowercase-schema-logistics", "rule-action": "convert-lowercase", "rule-target": "schema", "object-locator": { "schema-name": "LOGISTICS" } }, { "rule-id": 25, "rule-type": "transformation", "rule-name": "convert-lowercase-table-shipment-orders", "rule-action": "convert-lowercase", "rule-target": "table", "object-locator": { "schema-name": "LOGISTICS", "table-name": "SHIPMENT_ORDERS" } }, { "rule-id": 52, "rule-type": "transformation", "rule-name": "convert-lowercase-column-destination-city", "rule-action": "convert-lowercase", "rule-target": "column", "object-locator": { "schema-name": "LOGISTICS", "table-name": "SHIPMENT_ORDERS", "column-name": "DESTINATION_CITY" } } ] }
以下示例在从源数据库转换为目标数据库时执行这些操作:
-
将架构重命名
TEST_SCHEMA为TEST_NEW_SCHEMA。 -
将架构
REGIONS中的表重命名HR为ORG_REGIONS。 -
将架构
CITY中表LOCATIONS中的列重命名HR为ORG_CITY_NAME。
{ "rules": [ { "rule-id": 2, "rule-type": "transformation", "rule-name": "rename-schema-test-schema", "rule-action": "rename", "rule-target": "schema", "object-locator": { "schema-name": "TEST_SCHEMA" }, "value": "TEST_NEW_SCHEMA" }, { "rule-id": 15, "rule-type": "transformation", "rule-name": "rename-table-hr-regions", "rule-action": "rename", "rule-target": "table", "object-locator": { "schema-name": "HR", "table-name": "REGIONS" }, "value": "ORG_REGIONS" }, { "rule-id": 38, "rule-type": "transformation", "rule-name": "rename-column-hr-locations-city", "rule-action": "rename", "rule-target": "column", "object-locator": { "schema-name": "HR", "table-name": "LOCATIONS", "column-name": "CITY" }, "value": "ORG_CITY_NAME" } ] }
以下示例在从源数据库转换为目标数据库时执行这些操作:
-
将架构
SALARY中表EMPLOYEES中列的数据类型PAYROLL从更改为,精DECIMAL度NUMBER为 18,小数位数为 4。 -
将架构
NOTES中表EMPLOYEES中列的数据类型PAYROLL从更改为,长VARCHAR度VARCHAR2为 350。 -
将架构
HIRE_DATE中表EMPLOYEES中列的数据类型PAYROLL从更改DATE为,精TIMESTAMP WITH TIME ZONE度为 3。
{ "rules": [ { "rule-id": 10, "rule-type": "transformation", "rule-name": "change-datatype-column-salary", "rule-action": "change-data-type", "rule-target": "column", "object-locator": { "schema-name": "PAYROLL", "table-name": "EMPLOYEES", "column-name": "SALARY" }, "data-type": { "type": "DECIMAL", "precision": 18, "scale": 4 } }, { "rule-id": 29, "rule-type": "transformation", "rule-name": "change-datatype-column-notes", "rule-action": "change-data-type", "rule-target": "column", "object-locator": { "schema-name": "PAYROLL", "table-name": "EMPLOYEES", "column-name": "NOTES" }, "data-type": { "type": "VARCHAR", "length": 350 } }, { "rule-id": 56, "rule-type": "transformation", "rule-name": "change-datatype-column-hire-date", "rule-action": "change-data-type", "rule-target": "column", "object-locator": { "schema-name": "PAYROLL", "table-name": "EMPLOYEES", "column-name": "HIRE_DATE" }, "data-type": { "type": "TIMESTAMP WITH TIME ZONE", "precision": 3 } } ] }
以下示例在从源数据库转换为目标数据库时执行这些操作:
-
将架构
P_AMOUNT中存储过程PROCESS_PAYMENT中的参数的数据类型更改FINANCE为NUMERIC。 -
将架构
V_TAX_RATE中存储过程PROCESS_PAYMENT中的局部变量的数据类型更改FINANCE为NUMERIC精度 10 和小数位数 6。 -
将架构
V_DESCRIPTION中独立函数CALC_DISCOUNT中局部变量的数据类型更改FINANCE为长CHARACTER度为 150。
{ "rules": [ { "rule-id": 7, "rule-type": "transformation", "rule-name": "change-datatype-param-p-amount", "rule-action": "change-data-type", "rule-target": "routine parameter", "object-locator": { "schema-name": "FINANCE", "procedure-name": "PROCESS_PAYMENT", "parameter-name": "P_AMOUNT" }, "data-type": { "type": "NUMERIC" } }, { "rule-id": 21, "rule-type": "transformation", "rule-name": "change-datatype-localvar-v-tax-rate", "rule-action": "change-data-type", "rule-target": "local variable", "object-locator": { "schema-name": "FINANCE", "procedure-name": "PROCESS_PAYMENT", "local-variable-name": "V_TAX_RATE" }, "data-type": { "type": "NUMERIC", "precision": 10, "scale": 6 } }, { "rule-id": 43, "rule-type": "transformation", "rule-name": "change-datatype-localvar-v-description", "rule-action": "change-data-type", "rule-target": "local variable", "object-locator": { "schema-name": "FINANCE", "function-name": "CALC_DISCOUNT", "local-variable-name": "V_DESCRIPTION" }, "data-type": { "type": "CHARACTER", "length": 150 } } ] }
以下示例在从源数据库转换为目标数据库时执行这些操作:
-
将架构
GET_PRODUCT_PRICE中独立函数的返回数据类型更改FNG_COMPANY为BIGINT。 -
将架构
CALC_DISCOUNTED_PRICE中独立函数的返回数据类型更改FNG_COMPANY为DECIMAL。 -
将架构中包
CALCULATE_TAX内打包函数的返回数据类型更改FNG_COMPANY为REAL。TAX_UTILS
{ "rules": [ { "rule-id": 13, "rule-type": "transformation", "rule-name": "change-result-type-get-product-price", "rule-action": "change-data-type", "rule-target": "function result", "object-locator": { "schema-name": "FNG_COMPANY", "function-name": "GET_PRODUCT_PRICE" }, "data-type": { "type": "BIGINT" } }, { "rule-id": 28, "rule-type": "transformation", "rule-name": "change-result-calc-discounted-price", "rule-action": "change-data-type", "rule-target": "function result", "object-locator": { "schema-name": "FNG_COMPANY", "function-name": "CALC_DISCOUNTED_PRICE" }, "data-type": { "type": "DECIMAL" } }, { "rule-id": 61, "rule-type": "transformation", "rule-name": "change-result-type-calculate-tax", "rule-action": "change-data-type", "rule-target": "function result", "object-locator": { "schema-name": "FNG_COMPANY", "parent": "TAX_UTILS", "function-name": "CALCULATE_TAX" }, "data-type": { "type": "REAL" } } ] }
以下示例在从源数据库转换为目标数据库时执行这些操作:
-
为名称
MIGR_以开头的所有架构添加前缀。STG_ -
为名称
MIGR_以开头的所有架构中的所有表添加前缀。STG_ -
在名称
_NEW以开头的所有架构的所有表SRC_中,为名称以开头的所有列添加后缀。STG_
{ "rules": [ { "rule-id": 8, "rule-type": "transformation", "rule-name": "add-prefix-schemas-starting-with-stg", "rule-action": "add-prefix", "rule-target": "schema", "object-locator": { "schema-name": "STG_%" }, "value": "MIGR_" }, { "rule-id": 33, "rule-type": "transformation", "rule-name": "add-prefix-all-tables-in-stg-schemas", "rule-action": "add-prefix", "rule-target": "table", "object-locator": { "schema-name": "STG_%", "table-name": "%" }, "value": "MIGR_" }, { "rule-id": 57, "rule-type": "transformation", "rule-name": "add-suffix-columns-starting-with-src", "rule-action": "add-suffix", "rule-target": "column", "object-locator": { "schema-name": "STG_%", "table-name": "%", "column-name": "SRC_%" }, "value": "_NEW" } ] }