1

如果您从 中查询表dbc.columns,您将获得每一列的完整元数据,尤其是数据类型、长度、可空/不可空等。查询视图时,您只会获得数据库、表和列名。所有其他字段为空。

如果我有一个除了 之外什么都不做的select * from table视图,那么当它被编译为数据库对象时,基础表的元数据似乎会传播到视图。这即使对于计算列也是有意义的,因为我的实验表明 Teradata 分析所有可能的逻辑路径以确定计算列的类型。这是一个例子:

replace view mydb.testview as
select case when 1 = 1 then 'a' else 'aaaa' end a;

create table mydb.testviewtotable as (select * from mydb.testview) with data;

show table mydb.testviewtotable;

在那个 case 语句中,只有第一个条件会返回 true,所以结果总是'a'. 但是,当您查看表 DDL 时,您可以看到它计算的列VARCHAR(4)证明它分析了所有情况:

a VARCHAR(4) CHARACTER SET UNICODE NOT CASESPECIFIC

因此,假设此视图元数据存在于某处似乎是合理的,即使通过 DBC 查询该视图会导致除上述列之外的所有列都为空。

4

0 回答 0