更新时间:2024-06-29 GMT+08:00

约束和限制

DSC迁移Teradata的约束和限制如下:

  • DSC仅用于语法迁移,不支持数据迁移。
  • 如果在将IN/NOT IN操作符转换为EXISTS/NOT EXISTS时,子查询的SELECT子句包含aggregate函数,则可能导致迁移失败。

Teradata

  • 如果含有FORMAT参数的case语句未用半角括号“()”括起来,该语句不会处理。
    例如:
    1
    case when column1='0' then column1='value' end (FORMAT 'YYYYMMDD')as alias1
    

    在该示例中,case when column1='0' then column1='value' end未用半角括号括起,因此不会处理该语句。

  • 如果Teradata查询中同时使用SELECT *和QUALIFY子句,迁移的查询会为QUALIFY子句多返回一列。

    例如:

    Teradata查询

    1
    2
    3
    4
    SELECT * FROM dwQErrDtl_mc.C03_CORP_TIME_DPSIT_ACCT
    WHERE 1 = 1
    AND Data_Dt = CAST( '20150801' AS DATE FORMAT 'YYYYMMDD' )
    QUALIFY ROW_NUMBER( ) OVER( PARTITION BY Agt_Num, Agt_Modif_Num ORDER BY NULL ) = 1;
    

    迁移后的查询

    1
    2
    3
    4
    5
    6
    7
    SELECT * FROM (
    SELECT *, ROW_NUMBER( ) OVER( PARTITION BY Agt_Num, Agt_Modif_Num ORDER BY NULL ) AS ROW_NUM1
    FROM dwQErrDtl_mc.C03_CORP_TIME_DPSIT_ACCT
    WHERE 1 = 1
    AND Data_Dt = CAST( '20150801' AS DATE )
    ) Q1
    WHERE Q1.ROW_NUM1 = 1;
    

    在迁移后的查询中,ROW_NUMBER( ) OVER( PARTITION BY Agt_Num ,Agt_Modif_Num ORDER BY NULL ) AS ROW_NUM1列为额外返回的一列。

  • 子查询或函数内不支持对表的命名引用。
    例如,如果输入的查询包含表名(例如foo),迁移工具不会将基于该表命名的引用从子查询(foo.fooid)中迁移到该表中,或从调用该子查询的函数(getfoo(foo.fooid))中迁移到该表中。
    1
    2
    3
    4
    5
    6
    SELECT * FROM foo
     WHERE foosubid IN (
                         SELECT foosubid
                           FROM getfoo(foo.fooid) z
                          WHERE z.fooid = foo.fooid
                          );
    
  • 带有模式名的数据库更改为“SET SESSION CURRENT_SCHEMA”。

    TD 语法

    迁移后语法

    DATABASE SCHTERA 
    SET SESSION CURRENT_SCHEMA TO SCHTERA
  • 输入文件中包含表的专用关键词MULTISET VOLATILE,但GaussDB(DWS)不支持该关键词。因此,DSC在迁移过程中用关键词LOCAL TEMPORARY/UNLOGGED替换该关键词。请通过session_mode参数为CREATE TABLE语句设置默认表类型(SET/MULTISET)。