将 Teradata 用作 AWS SCT 的源 - AWS Schema Conversion Tool

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Teradata 用作 AWS SCT 的源

您可以使用 AWS SCT 将架构、代码对象和应用程序代码从 Teradata 转换到 Amazon Redshift 或 Amazon Redshift 和 AWS Glue 的组合。

将 Teradata 用作源的权限

下面列出了将 Teradata 用作源所需的权限:

  • SELECT ON DBC

  • SELECT ON SYSUDTLIB

  • SELECT ON SYSLIB

  • SELECT ON <source_database>

  • CREATE PROCEDURE ON <source_database>

在前面的示例中,将 <source_database> 占位符替换为源数据库的名称。

AWS SCT 需要具有 CREATE PROCEDURE 权限才能对源数据库中的所有过程执行 HELP PROCEDURE。AWS SCT 不会使用此权限在源 Teradata 数据库中创建任何新对象。

连接到作为源的 Teradata

使用 AWS Schema Conversion Tool 按照以下过程连接到 Teradata 源数据库。

连接到 Teradata 源数据库
  1. 在 AWS Schema Conversion Tool 中,选择添加源

  2. 选择 Teradata,然后选择下一步

    此时显示添加源对话框。

  3. 对于连接名称,输入数据库的名称。AWS SCT 会在左侧面板的树中显示此名称。

  4. 使用来自 AWS Secrets Manager 的数据库凭证或手动输入:

    • 要使用 Secrets Manager 中的数据库凭证,请按照以下说明进行操作:

      1. 对于 AWS 密钥,输入密钥名称。

      2. 选择填充可使用 Secrets Manager 中的数据库凭证自动填写数据库连接对话框中的所有值。

      有关使用 Secrets Manager 中的数据库凭证的信息,请参阅使用 AWS Secrets Manager

    • 要手动输入 Teradata 源数据库连接信息,请按照以下说明进行操作:

      参数 操作
      连接名称

      输入数据库的名称。AWS SCT 会在左侧面板的树中显示此名称。

      服务器名称

      输入源数据库服务器的域名系统(DNS)名称或 IP 地址。

      服务器端口

      输入用于连接到源数据库服务器的端口。

      数据库

      输入 Teradata 数据库的名称。

      用户名密码

      输入数据库凭证,以便连接到源数据库服务器。

      仅当您选择连接到项目中的数据库时,AWS SCT 才使用密码连接到源数据库。为了避免泄露源数据库的密码,AWS SCT 不会默认存储该密码。如果您关闭了 AWS SCT 项目并重新打开它,系统会根据需要提示您输入用于连接到源数据库的密码。

      存储密码

      AWS SCT 将创建一个安全文件库,用于存储 SSL 证书和数据库密码。启用此选项,可存储数据库密码,且无需输入密码可快速连接到数据库。

      加密数据

      请选择此选项以加密与数据库交换的数据。如果您选择此选项,则使用端口号 443 在 AWS SCT 和 Teradata 数据库之间传输加密数据。

      Teradata 驱动程序路径

      输入用于连接到源数据库的驱动程序的路径。有关更多信息,请参阅下载所需的数据库驱动程序

      如果您将驱动程序路径存储在全局项目设置中,则驱动程序路径不会显示在连接对话框中。有关更多信息,请参阅在全局设置中存储驱动程序路径

  5. 选择测试连接以验证 AWS SCT 是否可以连接到源数据库。

  6. 选择连接以连接到源数据库。

Teradata 源使用 LDAP 身份验证

要为在 Windows 中运行 Microsoft Active Directory 的 Teradata 用户设置轻量目录访问协议 (LDAP) 身份验证,请使用以下过程。

在以下过程中,Active Directory 域为 test.local.com。Windows 服务器为 DC 并且使用了默认设置进行配置。以下脚本创建 test_ldap Active Directory 账户,并且该账户使用 test_ldap 密码。

为在 Windows 中运行 Microsoft Active Directory 的 Teradata 用户设置 LDAP 身份验证
  1. /opt/teradata/tdat/tdgss/site 目录中,编辑文件 TdgssUserConfigFile.xml。将 LDAP 部分更改为以下内容。

    AuthorizationSupported="no" LdapServerName="DC.test.local.com" LdapServerPort="389" LdapServerRealm="test.local.com" LdapSystemFQDN="dc= test, dc= local, dc=com" LdapBaseFQDN="dc=test, dc=local, dc=com"
  2. 通过运行如下所示的配置来应用更改。

    #cd /opt/teradata/tdgss/bin #./run_tdgssconfig
  3. 通过运行以下命令来测试配置。

    # /opt/teradata/tdat/tdgss/14.10.03.01/bin/tdsbind -u test_ldap -w test_ldap

    该输出值应该类似于以下内容。

    LdapGroupBaseFQDN: dc=Test, dc=local, dc=com LdapUserBaseFQDN: dc=Test, dc=local, dc=com LdapSystemFQDN: dc= test, dc= local, dc=com LdapServerName: DC.test.local.com LdapServerPort: 389 LdapServerRealm: test.local.com LdapClientUseTls: no LdapClientTlsReqCert: never LdapClientMechanism: SASL/DIGEST-MD5 LdapServiceBindRequired: no LdapClientTlsCRLCheck: none LdapAllowUnsafeServerConnect: yes UseLdapConfig: no AuthorizationSupported: no FQDN: CN=test, CN=Users, DC=Anthem, DC=local, DC=com AuthUser: ldap://DC.test.local.com:389/CN=test1,CN=Users,DC=test,DC=local,DC=com DatabaseName: test Service: tdsbind
  4. 使用以下命令重新启动 TPA。

    #tpareset -f "use updated TDGSSCONFIG GDO"
  5. 在 Teradata 数据库中创建与 Active Directory 中相同的用户,如下所示。

    CREATE USER test_ldap AS PERM=1000, PASSWORD=test_ldap; GRANT LOGON ON ALL TO test WITH NULL PASSWORD;

如果您在 Active Directory 中更改 LDAP 用户的用户密码,则应在 LDAP 模式下连接到 Teradata 时指定此新密码。在默认模式下,您仍必须使用 LDAP 用户名和任意密码连接 Teradata。

在源 Teradata 数据仓库中配置统计数据收集

要转换源 Teradata 数据仓库,AWS SCT 使用统计数据优化转换后的 Amazon Redshift 数据仓库。您可以在 AWS SCT 中收集统计数据或上传统计数据文件。有关更多信息,请参阅收集或上传统计数据

要确保 AWS SCT 可以从您的数据仓库收集统计数据,请完成以下先决条件任务。

从 Teradata 数据仓库收集统计数据
  1. 运行以下查询以重新收集数据仓库中所有表的统计信息。

    collect summary statistics on table_name;

    在上述示例中,将 table_name 替换为源表名称。对您转换的每个表重复查询。

  2. 运行以下查询以确定用于转换数据仓库的用户的账户字符串。

    select * from dbc.accountinfo where username ='user_name'
  3. 使用上一个示例中的账户字符串为特定用户开启查询日志记录。

    BEGIN QUERY LOGGING WITH OBJECTS, SQL ON ALL ACCOUNT=('$M$BUSI$S$D$H');

    或者,为所有数据库用户开启查询日志记录。

    BEGIN QUERY LOGGING WITH SQL, OBJECTS LIMIT SQLTEXT=0 ON ALL;

收集完数据仓库统计数据后,关闭查询日志记录。为此,您可以使用以下代码示例。

end query logging with explain, objects, sql on all account=(' $M$BUSI$S$D$H');

在离线模下从源 Teradata 数据仓库收集统计数据

在 Teradata 数据仓库中配置统计数据收集后,即可在 AWS SCT 项目中收集统计数据。或者,您可以使用 Basic Teradata Query(BTEQ)脚本在离线模式下收集统计信息。然后,您可以将包含收集到的统计数据的文件上传到 AWS SCT 项目。有关更多信息,请参阅收集或上传统计数据

在离线模式下从 Teradata 数据仓库收集统计数据
  1. 创建包含以下内容的 off-line_stats.bteq 脚本。

    .OS IF EXIST column-stats-tera.csv del /F column-stats-tera.csv .OS IF EXIST table-stats-tera.csv del /F table-stats-tera.csv .OS IF EXIST column-skew-script-tera.csv del /F column-skew-script-tera.csv .OS IF EXIST column-skew-stats-tera.csv del /F column-skew-stats-tera.csv .OS IF EXIST query-stats-tera.csv del /F query-stats-tera.csv .LOGON your_teradata_server/your_login, your_password .EXPORT REPORT FILE = table-stats-tera.csv .SET TITLEDASHES OFF .SET WIDTH 10000 SELECT '"' || OREPLACE(COALESCE(c.DatabaseName, ''), '"', '""') || '";' || '"' || OREPLACE(COALESCE(c.TableName, ''), '"', '""') || '";' || '"' || TRIM(COALESCE(s.reference_count, '0')) || '";' || '"' || TRIM(COALESCE(CAST(p.RowCount AS BIGINT), '0')) || '";' || '"' || CAST(CAST(w.size_in_mb AS DECIMAL (38,1) FORMAT 'Z9.9') AS VARCHAR(38)) || '";' || '"' || TRIM(COALESCE(r.stat_fk_dep_count, '0')) || '";' || '"' || CAST(CAST(current_timestamp(0) as timestamp(0) format 'YYYY-MM-DDBHH:MI:SS') as VARCHAR(19)) || '"' (TITLE '"database_name";"table_name";"reference_count";"row_count";"size_in_mb";"stat_fk_dep_count";"current_ts"') FROM (select databasename, tablename from DBC.tablesv where tablekind IN ('T','O') and databasename = 'your_database_name' ) c left join (select DatabaseName, TableName, max(RowCount) RowCount from dbc.tableStatsv group by 1,2)p on p.databasename = c.databasename and p.tablename = c.tablename left join (SELECT r.ChildDB as DatabaseName, r.ChildTable as TableName, COUNT(DISTINCT r.ParentTable) reference_count FROM DBC.All_RI_ChildrenV r GROUP BY r.ChildDB, r.ChildTable) s on s.databasename = c.databasename and s.tablename = c.tablename left join (SELECT r.ParentDB as DatabaseName, r.ParentTable as TableName, COUNT(DISTINCT r.ChildTable) stat_fk_dep_count FROM DBC.All_RI_ParentsV r GROUP BY r.ParentDB, r.ParentTable) r on r.databasename = c.databasename and r.tablename = c.tablename left join (select databasename, tablename, sum(currentperm)/1024/1024 as size_in_mb from dbc.TableSizeV group by 1,2) w on w.databasename = c.databasename and w.tablename = c.tablename WHERE COALESCE(r.stat_fk_dep_count,0) + COALESCE(CAST(p.RowCount AS BIGINT),0) + COALESCE(s.reference_count,0) > 0; .EXPORT RESET .EXPORT REPORT FILE = column-stats-tera.csv .SET TITLEDASHES OFF .SET WIDTH 10000 '"' || TRIM(COALESCE(CAST(t2.card AS BIGINT), '0')) || '";' || SELECT '"' || OREPLACE(COALESCE(trim(tv.DatabaseName), ''), '"', '""') || '";' || '"' || OREPLACE(COALESCE(trim(tv.TableName), ''), '"', '""') || '";' || '"' || OREPLACE(COALESCE(trim(tv.columnname), ''), '"', '""') || '";' || '"' || TRIM(COALESCE(CAST(t2.card AS BIGINT), '0')) || '";' || '"' || CAST(current_timestamp AS VARCHAR(19)) || '"' (TITLE '"database_name";"table_name";"column_name";"cardinality";"current_ts"') FROM dbc.columnsv tv LEFT JOIN ( SELECT c.DatabaseName AS DATABASE_NAME, c.TABLENAME AS TABLE_NAME, c.ColumnName AS COLUMN_NAME, c.UniqueValueCount AS CARD FROM dbc.tablestatsv c WHERE c.DatabaseName = 'your_database_name' AND c.RowCount <> 0 ) t2 ON tv.DATABASENAME = t2.DATABASE_NAME AND tv.TABLENAME = t2.TABLE_NAME AND tv.COLUMNNAME = t2.COLUMN_NAME WHERE t2.card > 0; .EXPORT RESET .EXPORT REPORT FILE = column-skew-script-tera.csv .SET TITLEDASHES OFF .SET WIDTH 10000 SELECT 'SELECT CAST(''"' || TRIM(c.DatabaseName) || '";"' || TRIM(c.TABLENAME) || '";"' || TRIM(c.COLUMNNAME) || '";"'' || TRIM(CAST(COALESCE(MAX(cnt) * 1.0 / SUM(cnt), 0) AS NUMBER FORMAT ''9.9999'')) || ''";"'' || CAST(CURRENT_TIMESTAMP(0) AS VARCHAR(19)) || ''"'' AS VARCHAR(512)) AS """DATABASE_NAME"";""TABLE_NAME"";""COLUMN_NAME"";""SKEWED"";""CURRENT_TS""" FROM( SELECT COUNT(*) AS cnt FROM "' || c.DATABASENAME || '"."' || c.TABLENAME || '" GROUP BY "' || c.COLUMNNAME || '") t' || CASE WHEN ROW_NUMBER() OVER(PARTITION BY c.DATABASENAME ORDER BY c.TABLENAME DESC, c.COLUMNNAME DESC) <> 1 THEN ' UNION ALL' ELSE ';' END (TITLE '--SKEWED--') FROM dbc.columnsv c INNER JOIN (SELECT databasename, TABLENAME FROM dbc.tablesv WHERE tablekind = 'T' AND databasename = 'your_database_name') t ON t.databasename = c.databasename AND t.TABLENAME = c.TABLENAME INNER JOIN (SELECT databasename, TABLENAME, columnname FROM dbc.indices GROUP BY 1,2,3 WHERE TRANSLATE_CHK (databasename USING LATIN_TO_UNICODE) + TRANSLATE_CHK (TABLENAME USING LATIN_TO_UNICODE) + TRANSLATE_CHK (columnname USING LATIN_TO_UNICODE) = 0 ) i ON i.databasename = c.databasename AND i.TABLENAME = c.TABLENAME AND i.columnname = c.columnname WHERE c.ColumnType NOT IN ('CO','JN','N','++','VA','UT','AN','XM','A1','BO') ORDER BY c.TABLENAME, c.COLUMNNAME; .EXPORT RESET .EXPORT REPORT FILE = column-skew-stats-tera.csv .SET TITLEDASHES OFF .SET WIDTH 10000 .RUN FILE = column-skew-script-tera.csv .EXPORT RESET .EXPORT REPORT FILE = query-stats-tera.csv .SET TITLEDASHES OFF .SET WIDTH 32000 SELECT '"' || RTRIM(CAST(SqlTextInfo AS VARCHAR(31900)), ';') || '";"' || TRIM(QueryCount) || '";"' || TRIM(QueryId) || '";"' || TRIM(SqlRowNo) || '";"' || TRIM(QueryParts) || '";"' || CAST(CURRENT_TIMESTAMP(0) AS VARCHAR(19)) || '"' (TITLE '"query_text";"query_count";"query_id";"sql_row_no";"query_parts";"current_ts"') FROM ( SELECT QueryId, SqlTextInfo, SqlRowNo, QueryParts, QueryCount, SUM(QueryFirstRow) OVER (ORDER BY QueryCount DESC, QueryId ASC, SqlRowNo ASC ROWS UNBOUNDED PRECEDING) AS topN FROM (SELECT QueryId, SqlTextInfo, SqlRowNo, QueryParts, QueryCount, CASE WHEN ROW_NUMBER() OVER (PARTITION BY QueryCount, SqlTextInfo ORDER BY QueryId, SqlRowNo) = 1 AND SqlRowNo = 1 THEN 1 ELSE 0 END AS QueryFirstRow FROM ( SELECT q.QueryId, q.SqlTextInfo, q.SqlRowNo, MAX(q.SqlRowNo) OVER (PARTITION BY q.QueryId) QueryParts, COUNT(q.SqlTextInfo) OVER (PARTITION BY q.SqlTextInfo) QueryCount FROM DBC.dbqlsqltbl q INNER JOIN ( SELECT QueryId FROM DBC.DBQLogTbl t WHERE TRIM(t.StatementType) IN ('SELECT') AND TRIM(t.AbortFlag) = '' AND t.ERRORCODE = 0 AND (CASE WHEN 'All users' IN ('All users') THEN 'All users' ELSE TRIM(t.USERNAME) END) IN ('All users') --user_name list AND t.StartTime > CURRENT_TIMESTAMP - INTERVAL '30' DAY GROUP BY 1 ) t ON q.QueryId = t.QueryId INNER JOIN ( SELECT QueryId FROM DBC.QryLogObjectsV WHERE ObjectDatabaseName = 'your_database_name' AND ObjectType = 'Tab' AND CollectTimeStamp > CURRENT_TIMESTAMP - INTERVAL '30' DAY GROUP BY 1 ) r ON r.QueryId = t.QueryId WHERE q.CollectTimeStamp > CURRENT_TIMESTAMP - INTERVAL '30' DAY ) t ) t WHERE SqlTextInfo NOT LIKE '%";"%' ) q WHERE QueryParts >=1 AND topN <= 50 ORDER BY QueryCount DESC, QueryId, SqlRowNo QUALIFY COUNT(QueryId) OVER (PARTITION BY QueryId) = QueryParts; .EXPORT RESET .LOGOFF .QUIT
  2. 创建用于运行您在上一步中创建的 BTEQ 脚本的 td_run_bteq.bat 文件。此文件使用以下内容。

    @echo off > off-line_stats1.bteq & setLocal enableDELAYedexpansion @echo off > off-line_stats2.bteq & setLocal enableDELAYedexpansion set old1=your_teradata_server set new1=%1 set old2=your_login set new2=%2 set old3=your_database_name set new3=%3 set old4=your_password set /p new4=Input %2 pass? for /f "tokens=* delims= " %%a in (off-line_stats.bteq) do ( set str1=%%a set str1=!str1:%old1%=%new1%! >> off-line_stats1.bteq echo !str1! ) for /f "tokens=* delims= " %%a in (off-line_stats1.bteq) do ( set str2=%%a set str2=!str2:%old2%=%new2%! >> off-line_stats2.bteq echo !str2! ) type nul > off-line_stats1.bteq for /f "tokens=* delims= " %%a in (off-line_stats2.bteq) do ( set str3=%%a set str3=!str3:%old3%=%new3%! >> off-line_stats1.bteq echo !str3! ) type nul > off-line_stats2.bteq for /f "tokens=* delims= " %%a in (off-line_stats1.bteq) do ( set str4=%%a set str4=!str4:%old4%=%new4%! >> off-line_stats2.bteq echo !str4! ) del .\off-line_stats1.bteq echo export starting... bteq -c UTF8 < off-line_stats.bteq > metadata_export.log pause
  3. 创建用于运行您在上一步中创建的批处理文件的 runme.bat 文件。此文件使用以下内容。

    .\td_run_bteq.bat ServerName UserName DatabaseName

    runme.bat 文件中,将 ServerNameUserNameDatabaseName 替换为适用的值。

    然后,运行 runme.bat 文件。转换到 Amazon Redshift 的每个数据仓库重复此步骤。

运行此脚本后,会收到三个文件,其中包含每个数据库的统计信息。您可以将这些文件上传到 AWS SCT 项目中。为此,请从项目的左侧面板中选择数据仓库,然后打开上下文 (右键单击) 菜单。选择上传统计数据

Teradata 到 Amazon Redshift 的转换设置

要编辑 Teradata 到 Amazon Redshift 的转换设置,请在 AWS SCT 中选择设置,然后选择转换设置。从上方的列表中选择 Teradata,然后选择 Teradata – Amazon Redshift。AWS SCT 显示 Teradata 到 Amazon Redshift 转换的所有可用设置。

AWS SCT 中的 Teradata 到 Amazon Redshift 转换设置包括以下各项的选项:

  • 限制转换后的代码中操作项的注释数量。

    对于在转换后的代码中为所选严重性级别及更高级别的操作项添加注释,请选择操作项的严重性。AWS SCT 会在转换后的代码中为所选严重性级别及更高级别的操作项添加注释。

    例如,要最大限度地减少转换后的代码中的注释数量,请选择仅错误。要在转换后的代码中包含所有操作项的注释,请选择所有消息

  • 设置 AWS SCT 可以应用于目标 Amazon Redshift 集群的最大表数。

    对于目标 Amazon Redshift 集群的最大表数,请选择 AWS SCT 可以应用于 Amazon Redshift 集群的表数量。

    Amazon Redshift 具有限制了不同集群节点类型使用表数的配额。如果选择自动,则 AWS SCT 会根据节点类型确定要应用于目标 Amazon Redshift 集群的表数量。或者,手动选择值。有关更多信息,请参阅《Amazon Redshift 管理指南》中的 Amazon Redshift 中的配额和限制

    AWS SCT 转换所有源表,即使表的数量超过了您的 Amazon Redshift 集群所能存储的容量也是如此。AWS SCT 将转换后的代码存储在项目中,并且不会将其应用于目标数据库。如果应用转换后的代码时达到了 Amazon Redshift 集群的表配额,则 AWS SCT 会显示一条警告消息。此外,AWS SCT 还要将表应用于目标 Amazon Redshift 集群,直到表的数量达到上限。

  • 在 Amazon Redshift 中将源表的分区迁移到单独的表。为此,请选择使用 UNION ALL 视图,然后输入 AWS SCT 可以为单个源表创建的最大目标表数。

    Amazon Redshift 不支持表分区。要模拟此行为并加快查询运行速度,AWS SCT 可以将源表的每个分区迁移到 Amazon Redshift 中的单独表中。然后,AWS SCT 创建一个包含所有这些表中的数据的视图。

    AWS SCT 自动确定源表中的分区数量。根据源表分区的类型,此数量可能会超过您可以应用于 Amazon Redshift 集群的表配额。为避免达到此配额,请输入 AWS SCT 可以为单个源表的分区创建的最大目标表数。默认选项为 368 个表,它表示一年中 366 天的分区和以及 NO RANGEUNKNOWN 分区的两个表。

  • 对 Amazon Redshift 表列应用压缩。为此,请选择使用压缩编码

    AWS SCT 使用默认 Amazon Redshift 算法自动为列分配压缩编码。有关更多信息,请参阅《Amazon Redshift 数据库开发人员指南》中的压缩编码

    默认情况下,Amazon Redshift 不对定义为排序键和分配键的列应用压缩。您可以更改此行为并对这些列进行压缩。为此,请选择为 KEY 列使用压缩编码。只有选择使用压缩编码选项时,才能选择此选项。

  • 要在 SELECT * 语句转换后的代码中使用显式列列表,请选择使用显式列声明

  • 要模拟 Amazon Redshift 集群中主键和唯一键的行为,请选择模拟主键和唯一键的行为

    Amazon Redshift 不强制使用唯一键和主键,它们仅用于提供信息。如果在代码中使用这些约束,请确保 AWS SCT 在转换后的代码中模拟它们的行为。

  • 确保目标 Amazon Redshift 表中的数据唯一性。为此,请选择模拟 SET 表的行为

    Teradata 使用 SET 语法元素作为默认选项创建表。您不能在 SET 表中添加重复的行。如果源代码不使用此唯一性约束,请关闭此选项。在这种情况下,转换后的代码运行更快。

    如果源代码使用表中的 SET 选项作为唯一性约束,请启用此选项。在这种情况下,AWS SCT 在转换后的代码中重写 INSERT..SELECT 语句以模拟源数据库的行为。

Teradata 到 Amazon Redshift 的转换优化设置

要编辑 Teradata 到 Amazon Redshift 的转换优化设置,请在 AWS SCT 中选择设置,然后选择转换设置。从上方的列表中选择 Teradata,然后选择 Teradata – Amazon Redshift。在左窗格中,选择优化策略。AWS SCT 显示从 Teradata 转换到 Amazon Redshift 的转换优化设置。

AWS SCT 中 Teradata 到 Amazon Redshift 的转换优化设置包括以下各项的选项:

  • 使用自动表优化。为此,请选择使用 Amazon Redshift 自动调整表格

    自动表优化是 Amazon Redshift 中的一种自我调整过程,可自动优化表的设计。有关更多信息,请参阅《Amazon Redshift 数据库开发人员指南》中的使用自动表优化

    要仅使用自动表优化,请在初始键选择策略中选择

  • 使用策略选择排序键和分配键。

    您可以使用 Amazon Redshift 元数据、统计信息或这两个选项选择排序键和分配键。对于优化策略选项卡上的初始键选择策略,请选择以下选项之一:

    • 使用元数据,忽略统计信息

    • 忽略元数据,使用统计信息

    • 使用元数据和统计信息

    根据您选择的选项,您可以选择优化策略。然后,请为每种策略输入值(0–100)。这些值定义了每种策略的权重。AWS SCT 使用这些权重值定义每条规则如何影响分布键和排序键的选择。默认值基于 AWS 迁移最佳实践。

    您可以为查找小型表策略定义小型表的大小。在最小表格行数最大表格行数中,输入表格的最小和最大行数以将其定义为小型表。AWS SCT 将 ALL 分配方式应用于小型表。在这种情况下,向每个节点分配整个表的副本。

  • 配置策略详细信息。

    除了定义每种优化策略的权重外,您还可以配置优化设置。为此,请选择转换优化

    • 对于排序键列数限制,在排序键中输入最大列数。

    • 偏斜阈值中,输入列偏斜值的百分比(0–100)。AWS SCT 从分配键的候选列表中排除倾斜值大于阈值的列。AWS SCT 将列的偏斜值定义为最常见值的出现次数与记录总数的百分比。

    • 对于查询历史表中的前 N 个查询,请输入要分析的最常用查询的数量(1-100)。

    • 选择统计数据用户中,选择要分析查询统计数据的数据库用户。

    此外,在优化策略选项卡上,您可以为查找小型表策略定义小型表的大小。在最小表格行数最大表格行数中,输入表格中最小和最大行数以将其定义为小型表。AWS SCT 将 ALL 分配方式应用于小型表。在这种情况下,向每个节点分配整个表的副本。