文档首页 > > 工具指南> Migration Tool SQL语法迁移工具> 使用Migration Tool> Teradata Perl迁移

Teradata Perl迁移

分享
更新时间: 2019/08/09 GMT+08:00

概述

本节包含有关Teradata Perl文件迁移过程的详细信息。

请使用migrate.sh或migration.jar工具并设置--application-lang=perl,将Perl文件中的Teradata BTEQ或SQL_LANG脚本迁移到兼容Perl文件的DWS中。迁移Perl文件后,可使用对比工具比较迁移前的输入/源文件和迁移后的目标文件以进行验证。

Perl文件迁移迁移流程如下:

  1. 完成前提条件中的步骤。
  2. 创建输入文件夹,并将待迁移Perl文件复制到该文件夹。例如:/migrationfiles/perlfiles
  3. 执行Perl迁移工具,并将db-script-tag-name指定为BTEQ或SQL_LANG。
    1. Perl迁移工具从Perl文件中提取BTEQ或SQL_LANG类型脚本。
    2. Perl迁移工具调用Teradata SQL迁移工具来迁移提取的SQL脚本。有关SQL迁移的详细信息,请参见语法迁移规则。
    3. 迁移的脚本被嵌入回Perl文件中。
  4. 在指定的输出文件夹中创建迁移后的Perl文件。如果未指定输出文件夹,则工具会在输入文件夹内创建一个名为converted的输出文件夹,例如:/migrationfiles/perlfiles/converted。
    说明:

    包含SQL命令的Perl脚本变量也可以使用migrate-variables参数迁移为SQL。

在Linux中执行Perl迁移

要迁移Perl文件,请指定--source-db Teradata和--application-lang Perl参数值执行迁移工具(migrate.sh)。该工具可以迁移BTEQ和/或SQL_LANG脚本。请配置db-script-tag-name参数指定迁移脚本。

执行以下命令开始迁移。用户需指定源数据库、输入和输出文件夹路径、日志路径和应用程序语言:

sh migrate.sh  
  --source-db|-S Teradata   
  --application-lang|-A Perl   
  --input-folder|-I <input-script-path>    
  --output-folder|-O <output-script-path>    
  --migration-type|-M <Bulk or BLogic>    
[--log-folder|-L <log-path>]

在Windows中执行Perl迁移

要迁移Perl文件,请指定--source-db Teradata和--application-lang Perl参数值执行迁移工具(migrationtool.jar)。该工具可以迁移BTEQ和/或SQL_LANG脚本。请配置•db-script-tag-name参数指定迁移脚本。

执行以下命令开始迁移。用户需指定源数据库、输入和输出文件夹路径、日志路径和应用程序语言:

java -jar migrationtool.jar 
  --source-db|-S Teradata
  --application-lang|-A Perl
  --input-folder|-I <input-script-path> 
  --output-folder|-O <output-script-path> 
  --migration-type|-M <Bulk or BLogic> 
  [--log-folder|-L <log-path>]
以示例文件夹信息为例,命令如下:
java -jar migrationtool.jar -I ../executequery/ -O output/  -S teradata -M Bulk -A PERL

迁移详情(包括进度和完成状态)显示在控制台上。

Stage 1/3: Extracting SQL contents from perl files.
Extraction completed
Stage 2/3: Migrating SQL contents
Migration completed
Stage 3/3: Merging SQL contents.
Merging completed
**************************************************************************
Number of Perl files in input directory : 11
Number of Queries failed : 0
Number of SQL files failed : 0
Number of Perl file failures while extracting sql contents : 0
Number of Perl file failures while merging sql contents : 0
Number of Perl directory failures while extracting sql contents : 0
Number of Perl directory failures while merging sql contents : 0
Number of Perl files migrated successfully : 11
**************************************************************************
Log files are available at ./log

  

以下样例显示命令执行失败时的详情:

Stage 1/3: Extracting SQL contents from perl files.
Extraction completed
Stage 2/3: Migrating SQL contents
Migration completed
Stage 3/3: Merging SQL contents.
Merging completed
**************************************************************************
Number of Perl files in input directory : 11
Number of Queries failed : 0
Number of SQL files failed : 0
Number of Perl file failures while extracting sql contents : 0
Number of Perl file failures while merging sql contents : 1
Number of Perl directory failures while extracting sql contents : 0
Number of Perl directory failures while merging sql contents : 0
**************************************************************************
Log files are available at ./log

有关Perl迁移的配置参数,详情请参见Teradata Perl配置

有关命令行参数,详情请参见Migrate命令(migrationtool.jar)

说明:
  • 迁移工具格式化并迁移输入文件,并将格式化后的文件和迁移后的文件归档在输出文件夹中。如果迁移后您需要比对输入文件和输出文件,可直接比对输出文件夹中的格式化文件和迁移输出文件。
  • 确保输入路径中没有空格。如果存在空格,则工具会报错。详情请参见故障处理
  • 日志查看详情请参见日志参考
  • 迁移过程中,如果目标文件夹中存在任何文件或子文件夹,则该工具会在迁移之前删除目标文件夹中所有文件或文件夹,或者根据用户在config文件夹中application.properties文件中的参数设置覆盖现有文件。一旦删除,工具无法恢复这些文件或文件夹。
  • Process start time和Process end time分别表示迁移流程的开始和结束时间。Process total time是Migration Tool完成整个流程所用的总时间(以毫秒为单位)。在控制台上还显示已迁移文件的总数、用户配置的处理器数量、使用的处理器数量以及日志文件和错误日志文件的路径。
  • 设置perl-migration.properties文件中的--add-timing-on参数添加自定义实现来计算语句执行时间。

    Add Timing Option参数的输入、输出举例

    输入
    $V_SQL2 = "SELECT T1.userTypeInd FROM T07_EBM_CAMP T1  WHERE T1.Camp_List_Id = '$abc'";
    $STH = $dbh->prepare($V_SQL2);
    $sth->execute();
    @rows = $sth->fetchrow();
    输出
    $V_SQL2 = "SELECT T1.userTypeInd FROM T07_EBM_CAMP T1  WHERE T1.Camp_List_Id = '$abc'";
    $STH = $dbh->prepare($V_SQL2);
    use Time::HiRes qw/gettimeofday/;
    my $start = [Time::HiRes::gettimeofday()];
    $sth->execute();
    my $elapsed = Time::HiRes::tv_interval($start);
    $elapsed = $elapsed * 1000;
    printf("Time: %.3f ms\n", $elapsed);
    @rows = $sth->fetchrow();
    
  • --input-folder中指定的文件和文件夹不得具有GROUP和OTHERS的写权限,也就是--input-folder参数指定的文件夹权限不得高于755。出于安全考虑,如果输入文件或文件夹具有写入权限,则该工具不会执行。
  • 在并发操作场景下,每次执行的输入路径必须是唯一的。

最佳实践

为进行Perl文件的迁移优化,建议遵循如下标准实践。

  • BTEQ脚本应采用以下格式:
    print BTEQ <<ENDOFINPUT;
    TRUNCATE TABLE employee;
    ENDOFINPUT
    close(BTEQ);
  • SQL_LANG脚本应采用以下格式:
    my $sSQL=<<SQL_LANG;
    TRUNCATE TABLE employee;
    SQL_LANG
  • 注释中应不包括如下内容:
    • print BTEQ <<ENDOFINPUT
    • ENDOFINPUT
    • close(BTEQ)
    • my $sSQL=<<SQL_LANG
    • SQL_LANG
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区