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

本特性要求一次性执行以下自定义脚本文件:DSC/scripts/teradata/db_scripts/mig_fn_get_datatype_short_name.sql
有关文件执行的详细步骤,请参见运行环境和前提条件。
迁移工具将以下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。
输入:
123456
SEL columnid ,DecimalFractionalDigits FROM dbc.columns;
输出:
123456
SELECT ordinal_position columnid ,numeric_scale DecimalFractionalDigits FROM information_schema.columns;
- 关于表名和模式名称,迁移工具会将所有字符串值转换为小写。如果要区分大小写,使用双引号表示表/模式名称。在以下输入示例中,“Test”不会转换为小写。
123456
SELECT TableName FROM dbc . columns WHERE dbc.columns.databasename = '"Test"';
输入:dbc.columns table,指定所有支持列
1 2 3 4 5 6 7 8 910111213141516171819202122232425 |
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 T1inner join dbc.columns T2on T1.objectdatabasename =T2.DatabaseNameand T1.objecttablename =T2.TableNamewhere 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; |
输出:
1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233 |
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,指定表名
1 2 3 4 5 6 7 8 910 |
SELECT TRIM( ColumnName ) ,UPPER( dbc.columns.ColumnType ) FROM dbc . columns WHERE dbc.columns.databasename = '"Test"' ORDER BY dbc.columns.ColumnId; |
输出:
1 2 3 4 5 6 7 8 91011121314 |
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; |