AWS SCT ソースとしての Teradata の使用 - AWS Schema Conversion Tool

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS SCT ソースとしての Teradata の使用

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 でソースデータベース内のすべてのプロシージャに対して HELP PROCEDURE を実行するには、CREATE PROCEDURE 権限が必要です。AWS SCT は、この権限を使用してソース Teradata データベースに新しいオブジェクトを作成することはありません。

ソースとしての Teradata への接続

以下の手順を使用して、Teradata ソースデータベースを AWS Schema Conversion Tool に接続します。

Teradata ソースデータベースに接続するには
  1. AWS Schema Conversion Tool で、[Add source] (ソースの追加) を選択します。

  2. [Teradata] を選択し、その後 [Next] (次へ) を選択します。

    [Add source] (ソースの追加) ダイアログボックスが表示されます。

  3. [接続名] にデータベースの名前を入力します。この名前が AWS SCT の左側のパネルのツリーに表示されます。

  4. AWS Secrets Manager からのデータベース認証情報を使用するか、手動で入力してください。

    • Secrets Manager のデータベース認証情報を使用するには、以下の手順に従ってください。

      1. [AWS シークレット] で、シークレットの名前を選択します。

      2. [入力] を選択すると、Secrets Manager のデータベース接続ダイアログボックスにすべての値が自動的に入力されます。

      Secrets Manager のデータベース認証情報を使用する方法については、「AWS Secrets Manager を使用する」を参照してください。

    • Teradata ソースデータベースの接続情報を手動で入力するには、以下の手順に従ってください。

      パラメータ アクション
      接続名

      データベースの名前を入力します。AWS SCT の左パネルのツリーにこの名前が表示されます。

      [Server name] (サーバー名)

      ソースデータベースサーバーのドメインネームシステム (DNS) 名または IP アドレスを入力します。

      Server port

      ソースデータベースサーバーへの接続に使用するポートを入力します。

      データベース

      Teradata データベースの名前を入力します。

      User name (ユーザー名) と [Password] (パスワード)

      データベース認証情報を入力して、ソースデータベースサーバーに接続します。

      AWS SCT でパスワードを使用して、プロジェクト内のデータベースに接続することを選択する場合にのみソースデータベースに接続します。ソースデータベースのパスワードの漏洩を防ぐため、デフォルトで AWS SCT にパスワードは保存されません。AWS SCT プロジェクトを閉じて再び開いた場合は、必要に応じて、ソースデータベースへの接続に使用するパスワードの入力を求められます。

      Store Password

      AWS SCT は、安全なボールトを作成して、SSL 証明書とデータベースパスワードを保存します。このオプションをオンにすると、データベースのパスワードが保存されるため、パスワードを入力しなくてもデータベースにすばやく接続できます。

      [データの暗号化]

      データベースと交換するデータを暗号化する場合は、このオプションを選択します。このオプションを選択すると、ポート番号 443 を使用して AWS SCT と Teradata データベースとの間で暗号化されたデータが転送されます。

      [Teradata ドライバーバス]

      ソースデータベースへの接続に使用するドライバのパスを入力します。詳細については、「必要なデータベースドライバーのダウンロード」を参照してください。

      ドライバパスをグローバルプロジェクト設定に保存する場合、ドライバパスは接続ダイアログボックスに表示されません。詳細については、「グローバル設定でのドライバパスの保存」を参照してください。

  5. [Test Connection] (接続のテスト) を選択して、AWS SCT がソースデータベースに正常に接続できることを確認します。

  6. [Connect] (接続) を選択して、ソースデータベースに接続します。

Teradata ソースでの LDAP 認証の使用

Windows で Microsoft Active Directory を実行する Teradata ユーザーに対して Lightweight Directory Access Protocol (LDAP) 認証をセットアップするには、以下の手順を使用します。

以下の手順では、アクティブディレクトリドメインは test.local.com です。Windows サーバーは DC で、デフォルト設定で構成されています。以下のスクリプトは test_ldap Active Directory を作成し、このアカウントはパスワード test_ldap を使用します。

Microsoft Active Directory を Windows で実行する 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. 次に示すように、Active Directory と同じユーザーを Teradata データベースに作成します。

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

LDAP ユーザー用に Active Directory でユーザーパスワードを変更する場合、LDAP モードで Teradata への接続中に、この新しいパスワードを指定します。DEFAULT モードでは、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 プロジェクトで統計を収集できます。また、ベーシック Teradata クエリ (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 ファイルの [ServerName]、[UserName]、[DatabaseName] を適切な値に置き換えます。

    次に、runme.bat ファイルを実行します。Amazon Redshift に変換するデータウェアハウスごとに、このステップを繰り返します。

このスクリプトを実行すると、各データベースの統計情報を含む 3 つのファイルが返されます。これらのファイルは 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 のクォータと制限」を参照してください。

    Amazon Redshift クラスターが保存できる量を超える場合でも、AWS SCT はすべてのソーステーブルを変換します。AWS SCT では、変換されたコードはプロジェクトに保存され、ターゲットデータベースには適用されません。変換したコードを適用したときにテーブルの Amazon Redshift クラスターのクォータに達すると、AWS SCT に警告メッセージが表示されます。また、テーブルの数が制限に達するまで、AWS SCT はターゲット Amazon Redshift クラスターにテーブルを適用します。

  • ソーステーブルのパーティションを Amazon Redshift の別のテーブルに移行するには。そのためには、[UNION ALL ビューを使用する] を選択し、AWS SCT が 1 つのソーステーブルに対して作成できるターゲットテーブルの最大数を入力します。

    Amazon Redshift は、テーブルのパーティションをサポートしていません。この動作をエミュレートしてクエリをより速く実行するために、AWS SCT は、ソーステーブルの各パーティションを Amazon Redshift の個別のテーブルに移行できます。次に、AWS SCT はこれらすべてのテーブルのデータを含むビューを作成します。

    AWS SCT は、ソーステーブルのパーティションの数を自動的に決定します。ソーステーブルパーティショニングのタイプによっては、この数は Amazon Redshift クラスターに適用できるテーブルのクォータを超える場合があります。このクォータに達しないようにするには、AWS SCT が 1 つのソーステーブルのパーティションに対して作成できるターゲットテーブルの最大数を入力します。デフォルトのオプションは 368 テーブルで、これは 1 年 366 日のパーティションと、NO RANGE および UNKNOWN パーティションの 2 つのテーブルを表します。

  • 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 オプションを使用している場合は、このオプションをオンにしてください。この場合、変換されたコードの INSERT..SELECT ステートメントは、AWS SCT によってソースデータベースの動作をエミュレートするように書き直されます。

Terata から 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 分散スタイルを小さなテーブルに適用します。この場合は、テーブル全体のコピーがすべてのノードに分散されます。