からテーブルにクエリを実行dbc.columns
すると、すべての列、特にデータ型、長さ、null 許容/非 null などの完全なメタデータが取得されます。ビューにクエリを実行すると、データベース、テーブル、および列の名前のみが取得されます。他のすべてのフィールドは null です。
何もしないビューがある場合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 を介してそのビューを照会すると、前述の列以外のすべての列が null になるにもかかわらず、このビュー メタデータがどこかに存在すると仮定するのが妥当と思われます。