文档首页 > > 工具指南> Migration Tool SQL语法迁移工具> Teradata语法迁移> 模式对象> DBC.COLUMNS

DBC.COLUMNS

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

DBC.COLUMNS视图是一个表,包含有关表和视图列、存储过程、或宏参数的信息。其中包括以下列:DatabaseName、TableName、ColumnName、ColumnFormat、ColumnTitle、ColumnType、DefaultValue。在DWS中,这个表等效于information_schema.columns表。

说明:

本特性要求一次性执行以下自定义脚本文件:MigrationTool/scripts/teradata/db_scripts/mig_fn_get_datatype_short_name.sql

详情请参见前提条件

迁移工具将以下dbc.columns迁移到其对应的information_schema列中:

表1 dbc.columns迁移到information_schema列

dbc.columns

information_schema.columns

ColumnName

Column_Name

ColumnType

mig_fn_get_datatype_short_name (data_Type)

ColumnLength

character_maximum_length

DecimalTotalDigits

numeric_precision

DecimalFractionalDigits

numeric_scale

databasename

table_schema

tablename

table_name

ColumnId

ordinal_position

迁移dbc.columns时会假设以下条件成立:

  • FROM子句仅包含dbc.columns的TABLE NAME。
  • COLUMN NAME为以下任一格式:column_name或schema_name.table_name.column_name。

以下场景不支持dbc.columns迁移:

  • FROM子句包含dbc.columns表名的别名(dbc.columns别名)。
  • dbc.columns与其他表组合(FROM dbc.columns alias1,table1 alias2 OR dbc.columns alias1 join table1 alias2)。
说明:
  • 如果输入的SELECT语句直接包含dbc.columns的列名,则该工具会将输入的列名称迁移为别名。例如,输入列名称DecimalFractionalDigits会迁移为numeric_scale,其别名为DecimalFractionalDigits。
    例:输入:
    SEL
           columnid
           ,DecimalFractionalDigits
         FROM
           dbc.columns
    ;

    输出:

    SELECT
           ordinal_position columnid
           ,numeric_scale DecimalFractionalDigits
         FROM
           information_schema.columns
    ;
  • 关于表名和模式名称,迁移工具会将所有字符串值转换为小写。如果要区分大小写,使用双引号表示表/模式名称。在以下输入示例中,“Test”不会转换为小写。
    SELECT
              TableName
         FROM
              dbc . columns
         WHERE
              dbc.columns.databasename = '"Test"';

输入:dbc.columns table(指定所有支持列)

SELECT
'$AUTO_DB_IP'
,objectdatabasename
,objecttablename
,'$TX_DATE_10'
,''
,'0' 
,FirstStepTime
,FirstRespTime
,RowCount
,cast(RowCount*sum(case when T2.ColumnType ='CV' then T2.ColumnLength/3 else  T2.ColumnLength end) as decimal(38,0))
,'3' 
,''
,'BAK_CLR_DATA'
,'2'
,''
FROM TMP_clr_information T1
inner join dbc.columns T2
on T1.objectdatabasename =T2.DatabaseName
and T1.objecttablename =T2.TableName
where  T2.DatabaseName not in (
sel child from dbc.children 
where parent='$FCRM_DB'
)
group by 1,2,3,4,5,6,7,8,9,11,12,13,14,15;

输出

SELECT
          '$AUTO_DB_IP'
          ,objectdatabasename
          ,objecttablename
          ,'$TX_DATE_10'
          ,''
          ,'0'                                
          ,FirstStepTime
          ,FirstRespTime
          ,RowCount
          ,CAST( RowCount * SUM ( CASE WHEN mig_fn_get_datatype_short_name ( T2.data_Type ) = 'CV' THEN T2.character_maximum_length / 3 ELSE T2.character_maximum_length END ) AS DECIMAL( 38 ,0 ) )                        
          ,'3'                                
          ,''
          ,'BAK_CLR_DATA'
          ,'2'
          ,''
     FROM
          TMP_clr_information T1 INNER JOIN information_schema.columns T2
               ON T1.objectdatabasename = T2.table_schema
          AND T1.objecttablename = T2.table_name
     WHERE
          NOT EXISTS (
               SELECT
                         child
                    FROM
                         dbc.children
                    WHERE
                         child = T2.table_schema
                         AND( parent = '$FCRM_DB' )
          )
     GROUP BY
          1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,11 ,12 ,13 ,14 ,15
;

输入:dbc.columns table(指定TABLE NAME

SELECT
          TRIM( ColumnName )
          ,UPPER( dbc.columns.ColumnType )
     FROM
          dbc . columns
     WHERE
          dbc.columns.databasename = '"Test"'
     ORDER BY
          dbc.columns.ColumnId
;

输出

SELECT
          TRIM( Column_Name )
          ,UPPER( mig_fn_get_datatype_short_name ( information_schema.columns.data_Type ) )
     FROM
          information_schema.columns
     WHERE
          information_schema.columns.table_schema = CASE
               WHEN TRIM( '"Test"' ) LIKE '"%'
               THEN REPLACE( SUBSTR( '"Test"' ,2 ,LENGTH( '"Test"' ) - 2 ) ,'""' ,'"' )
               ELSE LOWER( '"Test"' )
          END
     ORDER BY
          information_schema.columns.ordinal_position
;
分享:

    相关文档

    相关产品

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

提交成功!

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

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

*必选

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

字符长度不能超过200

提交反馈 取消

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

跳转到云社区