2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息

目录

  • 一.前言
  • 二.数据字典
  • 三. DBC.Columns : ColumnType 映射关系
    • 3.1 思路及步骤
    • 3.2 特殊类型的表 Method ,Function
  • 四.ColumnType 映射关系汇总
  • 五.SQL获取字段信息(结论)
  • 附录
    • DBC.Columns建表语句
    • VARCHAR 字段长度测试
    • 长度、精度、标度
    • 编码方式对比 (ASCII/IOS8859-1/UNICODE/UTF-8/GBK)
    • UTF-8和Unicode与GBK的关系
  • 相关文章
  • 参考文章


相关链接

  • Excel目录

DBC.Columns 提供有关表 (Table)视图 (View))的列、存储过程(Produce)的参数、用户定义类型的属性用户定义方法 (Method)的参数、宏 (Macro)用户定义的函数 (Function)的信息
参考(Teradata Database Data Dictionary:Teradata数据库数据字典)

DBC.Columnsv 与上视图结构类似,本文没有深入研究。
2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息_第1张图片
2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息_第2张图片

一.前言

在进行推送工作时,一般从S层推送原表至下游服务器
每次都需要通过SHOW TABLE的方式获取原表的建表语句,在通过手工处理
例:

SHOW TABLE SDDL.ACS_DQ01;

CREATE MULTISET TABLE SDDL.ACS_DQ01 ,NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO
     (
      SRC_SYS CHAR(3) CHARACTER SET UNICODE CASESPECIFIC TITLE '源系统简码',
      SRC_OWNER VARCHAR(50) CHARACTER SET UNICODE CASESPECIFIC TITLE '所属用户',
      TABLE_NAME VARCHAR(200) CHARACTER SET UNICODE CASESPECIFIC TITLE '源系统表名',
      COL_NAME VARCHAR(100) CHARACTER SET UNICODE CASESPECIFIC TITLE '字段英文名',
      COL_DESC VARCHAR(4000) CHARACTER SET UNICODE CASESPECIFIC TITLE '字段描述',
      COL_ID INTEGER TITLE '字段顺序',
      COL_DATA_TYPE VARCHAR(50) CHARACTER SET UNICODE CASESPECIFIC TITLE '字段数据类型',
      COL_DATA_LENGTH BIGINT TITLE '字段数据长度',
      COL_DATA_SCALE INTEGER TITLE '字段数据精度',
      DATA_DT_SRC DATE FORMAT 'YYYY-MM-DD' TITLE '源系统数据日期',
      REC_SEQ BIGINT TITLE '记录条数')
NO PRIMARY INDEX ;
  • 清洗第一步(Notepad++)
    替换 CHARACTER SET UNICODE CASESPECIFIC => 空
    替换 TITLE ’ => 空
    替换 ‘, =>
    替换六个空格 ’ ’ => 空
    替换一个空格’ ’ => 一个tab键
    手动删除表头表尾
    2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息_第3张图片

  • 清洗第二步(Excel)
    2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息_第4张图片

  • 第三步:邮件通知 xxx,表结构调研完成,可以进行任务并投产

当表较多时,工作量就会很大,且人工清洗(NotePad++替换功能)容易发生错误,就可以通过查询系统表 DBC.Columns 获取这些信息


二.数据字典

列名(常用标黄) 中文 参考值 备注
DatabaseName 所属库 SDDL
TableName 表名 GGS_USER_BASIC_INFO
ColumnName 字段名 TEL
ColumnFormat 字段格式 X(32) 如DATE类型这里就可以是 ‘YYYYMMDD’
ColumnTitle 字段别名 联系电话
SPParameterType - NULL
ColumnType 字段类型 CV
ColumnUDTName -
ColumnLength 字段长度(物理占用字节数量) 32
DefaultValue 默认值
Nullable 允许为空? Y
CommentString - ?
DecimalTotalDigits 精度(总位数) ? 如字段类型 DECIMAL(5,2)则此处为5
DecimalFractionalDigits 标度(小数点后位数) ? 如字段类型 DECIMAL(5,2)则此处为2
ColumnId 字段序号(非主键 、序号顺序即建表字段顺序) 1033
UpperCaseFlag 转大写标识 C 取值范围 C N 含义不确定
CompressValue - ?
ColumnConstraint - ?
ConstraintCount - 0
CreatorName 创建者(用户名) ALL
CreateTimeStamp 创建时间(YYYY/MM/DD HH:mm:ss) 2019/6/26 17:30:37
LastAlterName 最后修改者(用户名)
LastAlterTimeStamp 最后修改时间(YYYY/MM/DD HH:mm:ss) 2019/6/26 17:30:37
CharType - 1 取值范围 [0,1,2] 含义不确定
IdColType - ?
AccessCount - ?
LastAccessTimeStamp - ?
CompressValueList - ?
TimeDimension - N
VTCheckType - ?
TTCheckType - ?
Constraintld - ?
ArrayColNumberOfDimensions - ?
ArrayColScope - ?
ArrayColElementTyoe - ?
ArrayColElementUdtName - ?

三. DBC.Columns : ColumnType 映射关系

3.1 思路及步骤

  • STEP 1
    首先通过DISTINCT获取所有字段类型
SEL DISTINCT 
ColumnType--列的类型
FROM DBC.Columns ORDER BY 1 ASC

	ColumnType
1	?
2	++
3	AT
4	BF
5	BO
6	BV
7	CF
8	CO
9	CV
10	D 
11	DA
12	DS
13	F 
14	I 
15	I1
16	I2
17	I8
18	JN
19	N 
20	PD
21	PM
22	PS
23	PT
24	PZ
25	SZ
26	TS
27	TZ
28	UT
29	VA
30	XM
31	YM
  • STEP 2
    先随便找一张表,通过以下方式对应表
--查看系统表
SEL 
	ColumnId, --字段主键(与建表顺序一致)
	DataBaseName,--所属库
	TableName,--表名
	DefaultValue,--默认值	
	ColumnName,--字段名
	ColumnTitle,--字段别名
	ColumnType,--字段类型
	ColumnLength,--字段长度
	DecimalTotalDigits,--精度
	DecimalFractionalDigits --标度
	ColumnFormat --格式
FROM 
	DBC.Columns
WHERE 
	DATABASENAME='SDDL'
	AND TABLENAME='NKG_BB_CONTRACT'
	ORDER BY 1;
--查看表结构	
SHOW TABLE SDDL.NKG_BB_CONTRACT
  • STEP 3
    清洗后通过EXCEL的VLOOKUP函数进行匹配

2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息_第5张图片
这里可以很清楚看出映射关系

字段类型ColumnType 映射值 拼接规则
CF CHAR a. ASCII编码(LATIN) :CHAR(长度)
b. UNICODE编码 : CHAR(长度/2)
CV VARCHAR a. ASCII编码(LATIN) : VARCHAR(长度)
b. UNICODE编码 : VARCHAR(长度/2)
D DECIMAL DECIMAL(精度,标度)
DA DATE DATE FORMAT ‘格式’
I INTEGER INTEGER
I8 BIGINT BIGINT
  • STEP 4
    继续查询剩余字段类型类型,要一个表尽可能涵盖最多数量未知字段类型,通过sql实现
--下面通过WHERE限制条件
--找到其余字段类型所在库和表,查看建表语句来匹配其他字段类型
SEL 
	DataBaseName,--库名
	TableName,--表名
	COUNT(1)
FROM 
	(
	SEL DISTINCT
		DataBaseName,--所属库
		TableName,--表名
		ColumnType--列的类型
	FROM DBC.Columns
	WHERE ColumnType IN (
						'?',
						'++',
						'AT',
						'BF',
						'BO',
						'BV',
						--'CF',
						'CO',
						--'CV',
						--'D',
						--'DA',
						'DS',
						'F',
						--'I',
						'I1',
						'I2',
						--'I8',
						'JN',
						'N',
						'PD',
						'PM',
						'PS',
						'PT',
						'PZ',
						'SZ',
						'TS',
						'TZ',
						'UT',
						'VA',
						'XM',
						'YM'
						)
        )T
GROUP BY
        DataBaseName,TableName 
ORDER BY 3 DESC

说明通过对比 PDCRDATA.DBQLUtilityTbl_Hst 表可以查到6中新的字段类型映射关系2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息_第6张图片

  • STEP 5
    下面通过查系统表和建表语句对应字段类型
--查系统表看字段信息
SEL 
	ColumnId, --字段主键(与建表顺序一致)
	DataBaseName,--所属库
	TableName,--表名
	DefaultValue,--默认值	
	ColumnName,--字段名
	ColumnTitle,--字段别名
	ColumnType,--字段类型
	ColumnLength,--字段长度
	DecimalTotalDigits,--精度
	DecimalFractionalDigits,--标度
	ColumnFormat --格式
FROM 
	DBC.Columns
WHERE 
	DATABASENAME='PDCRDATA'
	AND TABLENAME='DBQLUtilityTbl_Hst'
	ORDER BY 1

--查看建表语句
SHOW TABLE PDCRDATA.DBQLUtilityTbl_Hst;
  • STEP 6
    将清洗后的新表信息加入excel表中,可以看到又新增了6个字段的映射信息
    2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息_第7张图片
字段类型ColumnType 映射值 拼接规则
BF BYTE BYTE(长度)
BV VARBYTE VARBYTE(长度)
CF CHAR a. ASCII编码(LATIN) :CHAR(长度)
b. UNICODE编码 : CHAR(长度/2)
CV VARCHAR a. ASCII编码(LATIN) :VARCHAR(长度)
b. UNICODE编码 : VARCHAR(长度/2)
D DECIMAL DECIMAL(精度,标度)
DA DATE DATE FORMAT ‘格式’
F FLOAT FLOAT
I INTEGER INTEGER
I1 BYTEINT BYTEINT
I2 SMALLINT SMALLINT
I8 BIGINT BIGINT
TS TIMESTAMP TIMESTAMP (标度)
  • 下面重复STEP 4-6 步骤操作,直到获取所有字段类型的映射关系

3.2 特殊类型的表 Method ,Function

其中某些表不可以查看表结构,比如
2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息_第8张图片
执行SHOW TABLE 会提示 ‘regexp_replace’ is not a table

SHOW TABLE TD_SYSFNLIB.regexp_replace; --不是表
--SHOW VIEW TD_SYSFNLIB.regexp_replace; -- 不是视图
--SHOW Procedure TD_SYSFNLIB.regexp_replace; --不是存储过程          
--SHOW Macro TD_SYSFNLIB.regexp_replace; --不是宏

在这里插入图片描述
就需要通过Teradata Administrator客户端查看,并对比SQL查询结果

sel 
	DataBaseName,--所属库
	TableName,--表名
	ColumnName,--列名
	ColumnFormat,--格式化
	ColumnTitle,--属性
	ColumnType,--列的类型
	ColumnLength,--字段长度
	DefaultValue,--默认值
	DecimalTotalDigits,--精度
	DecimalFractionalDigits --标度
from
DBC.Columns
where 	DataBaseName='TD_SYSFNLIB'
	and TableName='regexp_replace'
order by 3

2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息_第9张图片
2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息_第10张图片
可以知道
N=> NUMBER
++ => TD_ANYTYPE

PS:除了Function其他类型的还有User Defined TypeMethod
2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息_第11张图片


四.ColumnType 映射关系汇总

--DBC.Columns字段信息表
SEL 
	ColumnId, --字段主键(与建表顺序一致)
	DataBaseName,--所属库
	TableName,--表名
	DefaultValue,--默认值	
	ColumnName,--字段名
	ColumnTitle,--字段别名
	ColumnType,--字段类型
	ColumnLength,--字段长度
	DecimalTotalDigits,--精度
	DecimalFractionalDigits,--标度
	ColumnFormat --格式
FROM 
	DBC.Columns
WHERE 
	DATABASENAME='xxx'
	AND TABLENAME='xxx'
	ORDER BY 1

标黄字体为系统 Method / Function 专用字段,调研表结构时不考虑

编号 字段类型ColumnType 映射值 拼接规则 备注
1 ? ? 不代表实际值 表示为空
2 ++ TD_ANYTYPE 固定 0 字节
系统Function
TD_SYSFNLIB.regexp_replace
startPosition 字段
3 AT TIME 系统Method
SYSUDTLIB.INTPRDTIMETYPE_CONSTR1
P1字段
4 BF BYTE BYTE 固定 4 字节
5 BO BLOB BLOB Binary Large Object
二进制大对象,是一个可以存储二进制文件的容器。
写为 BLOB 与 BLOB(10285760) 效果相同
6 BV VARBYTE VARBYTE
7 CF CHAR a. ASCII编码(LATIN) :CHAR(长度)
b. UNICODE编码 : CHAR(长度/2)
ColumnType (ColumnLength)
8 CO CLOB CLOB Character Large Object
它将字符大对象存储为数据库表某一行中的一个列值
写为 CLOB 或 CLOB(2097088000) 效果相同
9 CV VARCHAR a. ASCII编码(LATIN) : VARCHAR(长度)
b. UNICODE编码 : VARCHAR(长度/2)
ColumnType (ColumnLength)
10 D DECIMAL
DECIMAL (精度,标度)
ColumnType ( DecimalTotalDigits ,DecimalFractionalDigits)
根据长度自动分配
字节长度取值范围为 [1,2,4,8,16]
11 DA DATE DATE FORMAT ‘格式’ ColumnType FORMAT ‘ColumnFormat’
12 DS DAY TO SECOND 系统Method
TD_SYSFNLIB .NUMTODSINTERVAL
RETURN0 字段
13 F FLOAT FLOAT
14 I INTEGER INTEGER 固定4 字节
15 I1 BYTEINT BYTEINT 固定 1 字节
16 I2 SMALLINT SMALLINT 固定 2 字节
17 I8 BIGINT BIGINT 固定 8 字节
18 JN JSON 系统Method
SYSUDTLIB .JSON_COMBINE_UU1_LOB
SELF字段
19 N NUMBER NUMBER(精度,标度) 固定18字节
20 PD PINTERNALPERIODDATETYPE 系统Method
SYSUDTLIB .IntPeriodDateType_P_Intersect
SELF字段
21 PM INTERNALPERIODTIMESTAMPWTZTYPE 系统Method
SYSUDTLIB .INTPRDTSWTZTYPE_NORMALIZE1
SELF字段
22 PS PERIOD(TIMESTAMP) 系统Function
TD_SYSFNLIB.TD_NORMALIZE_OVERLAP2
duration 字段
23 PT INTERNALPERIODTIMETYPE 系统Method
SYSUDTLIB.INTPRDTIMETYPE_CONSTR1
SELF 字段
24 PZ INTERNALPERIODTIMEWTZTYPE 系统Method
SYSUDTLIB.INTPRDTIMEWTZTYPE_CONSTR1
SELF 字段
25 SZ TIMESTAMP WITH TIMEZONE 系统Function
TD_SYSFNLIB.Months_Between_tswz
input_param1 字段
26 TS TIMESTAMP TIMESTAMP(标度) 常用的有 TIMESTAMP(0) 和 TIMESTAMP(6)
27 TZ TIME WITH TIMEZONE 系统Method
SYSUDTLIB.INTPRDTIMEWTZTYPE_CONSTR1
P1 字段
28 UT VARIANT_TYPE 系统Function
TD_SYSFNLIB.TD_NORMALIZE_OVERLAP2
inK 字段
29 VA TD_VALIST 系统Function
TD_SYSFNLIB.XMLAGG
expr 字段
30 XM XML 系统Function
TD_SYSFNLIB.XMLPUBLISH_GENSQL
xslt 字段
31 YM YEAR TO MONTH 系统Function
TD_SYSFNLIB.NUMTOYMINTERVAL
RETURN0 字段

由于不能确定DBC.Colums表哪个字段代表编码分类,所以不能通过 LENGTH 字段去拼接数据格式,所以我采用了通过截取ColumnFormat的方式来拼接字符类型长度
2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息_第12张图片

五.SQL获取字段信息(结论)

--DBC.Columns字段信息表
SEL DISTINCT
	ColumnId, --字段序号(与建表顺序一致,非唯一主键id)
	DataBaseName,--所属库
	TableName,--表名
	--DefaultValue,--默认值	
	ColumnName,--字段名
	--ColumnType,--字段类型
	CASE 
		--4. BF -> BYTE
		WHEN ColumnType='BF' THEN 'BYTE'
		--5. BO -> BLOB
		WHEN ColumnType='BO' THEN 'BLOB'	
		--6. BV -> VARBYTE 
		WHEN ColumnType='BV' THEN 'VARBYTE'	
		--7. CF -> CHAR(长度) -> CHAR(TO_CHAR( ColumnLength ))
			--WHEN ColumnType='CF' THEN 'CHAR(' || TO_CHAR( ColumnLength / 2 ) || ')'
			WHEN ColumnType='CF' THEN 'CHAR(' || SUBSTRING(TRIM(ColumnFormat),3,CHARS(TRIM(ColumnFormat))-3) || ')'
		--8. CO -> CLOB
		WHEN ColumnType='CO' THEN 'CLOB'
		--9. CV -> VARCHAR(长度) -> VARCHAR(TO_CHAR( ColumnLength ))
			--WHEN ColumnType='CV' THEN 'VARCHAR(' || TO_CHAR( ColumnLength / 2 ) || ')'
			WHEN ColumnType='CV' THEN 'VARCHAR(' || SUBSTRING(TRIM(ColumnFormat),3,CHARS(TRIM(ColumnFormat))-3) || ')'
		--10. D -> DECIMAL(精度,标度) -> DECIMAL(TO_CHAR( DecimalTotalDigits ),TO_CHAR( DecimalFractionalDigits ))
		WHEN ColumnType='D' THEN 'DICIMAL(' || TO_CHAR( DecimalTotalDigits ) || ',' || TO_CHAR( DecimalFractionalDigits ) ||')'
		--11. DA -> DATE FORMAT '格式'
		WHEN ColumnType='DA' THEN 'DATE FORMAT ''' || TRIM(ColumnFormat) || '''' 
		--12. F -> FLOAT 
		WHEN ColumnType='F' THEN 'FLOAT'
		--13. I -> INTEGER
		WHEN ColumnType='I' THEN 'INTEGER'
		--14. I1 -> BYTEINT
		WHEN ColumnType='I1' THEN 'BYTEINT'
		--15. I2 -> SMALLINT
		WHEN ColumnType='I2' THEN 'SMALLINT'
		--16. I8 -> BIGINT
		WHEN ColumnType='I8' THEN 'BIGINT'
		--17. N -> NUMBER(精度,标度) -> NUMBER(TO_CHAR( DecimalTotalDigits ),TO_CHAR( DecimalFractionalDigits ))
		WHEN ColumnType='N' THEN 'NUMBER(' || TO_CHAR( DecimalTotalDigits ) || ',' || TO_CHAR( DecimalFractionalDigits ) ||')'
		--18. TS -> TIMESTAMP(标度) -> TIMESTAMP(TO_CHAR( DecimalFractionalDigits ))
		WHEN ColumnType='TS' THEN 'TIMESTAMP(' || TO_CHAR( DecimalFractionalDigits ) || ')'		
		ELSE NULL
	END AS SQL_Combine, --SQL合并结果
	ColumnTitle,--字段别名
	TO_CHAR( ColumnLength ),--字段长度
	TO_CHAR( DecimalTotalDigits ),--精度
	TO_CHAR( DecimalFractionalDigits )--标度
	--ColumnFormat --格式
FROM 
	DBC.Columns
WHERE 
	DataBaseName='SDDL'
	AND TABLENAME='ACS_DQ01'
ORDER BY 1

这样就可以方便的得到标准格式的数据类型了
2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息_第13张图片
对比EXCEL手动清洗结果
2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息_第14张图片
这样就可以通过替换SQL中的WHERE条件方便的查询表结构了


  • 20200920优化版本版本
    1.在SQL Assistant中查询,结果为 NULL时显示为?,优化了这一显示结果,及替换字段中文中出现的换行符CHR(13)
    2.解决ColunmnTitle为NULL时会导致表查询不出来的问题
SEL DISTINCT
	--T.ColumnId, --字段序号(与建表顺序一致,非唯一主键id)
	TRIM(T.DataBaseName) AS DataBaseName,--所属库
	T.TableName AS TableName,--表名
	CASE 
		WHEN TT.CommentString IS NULL THEN '' --优化在值为空时在TD中显示为问号的问题
		ELSE OREPLACE(TRIM(TT.CommentString),CHR(13),'')
	END AS CommentString,--表中文名
	--DefaultValue,--默认值	
	TRIM(T.ColumnName) AS ColumnName,--字段名
	--ColumnType,--字段类型
	CASE 
		WHEN T.ColumnTitle IS NULL THEN ''
		ELSE OREPLACE(TRIM(T.ColumnTitle),CHR(13),'') 
	END AS ColumnTitle,--字段别名
	CASE 
		--4. BF -> BYTE
		WHEN T.ColumnType='BF' THEN 'BYTE'
		--5. BO -> BLOB
		WHEN T.ColumnType='BO' THEN 'BLOB'	
		--6. BV -> VARBYTE 
		WHEN T.ColumnType='BV' THEN 'VARBYTE'	
		--7. CF -> CHAR(长度) -> CHAR(TO_CHAR( ColumnLength ))
			--WHEN ColumnType='CF' THEN 'CHAR(' || TO_CHAR( ColumnLength / 2 ) || ')'
			WHEN T.ColumnType='CF' THEN 'CHAR(' || SUBSTRING(TRIM(T.ColumnFormat),3,CHARS(TRIM(T.ColumnFormat))-3) || ')'
		--8. CO -> CLOB
		WHEN T.ColumnType='CO' THEN 'CLOB'
		--9. CV -> VARCHAR(长度) -> VARCHAR(TO_CHAR( ColumnLength ))
			--WHEN ColumnType='CV' THEN 'VARCHAR(' || TO_CHAR( ColumnLength / 2 ) || ')'
			WHEN T.ColumnType='CV' THEN 'VARCHAR(' || SUBSTRING(TRIM(T.ColumnFormat),3,CHARS(TRIM(T.ColumnFormat))-3) || ')'
		--10. D -> DECIMAL(精度,标度) -> DECIMAL(TO_CHAR( DecimalTotalDigits ),TO_CHAR( DecimalFractionalDigits ))
		WHEN T.ColumnType='D' THEN 'DECIMAL(' || TO_CHAR( T.DecimalTotalDigits ) || ',' || TO_CHAR( T.DecimalFractionalDigits ) ||')'
		--11. DA -> DATE FORMAT '格式'
			--WHEN T.ColumnType='DA' THEN 'DATE FORMAT ''' || TRIM(T.ColumnFormat) || '''' 
		WHEN T.ColumnType='DA' THEN 'DATE' 
		--12. F -> FLOAT 
		WHEN T.ColumnType='F' THEN 'FLOAT'
		--13. I -> INTEGER
		WHEN T.ColumnType='I' THEN 'INTEGER'
		--14. I1 -> BYTEINT
		WHEN T.ColumnType='I1' THEN 'BYTEINT'
		--15. I2 -> SMALLINT
		WHEN T.ColumnType='I2' THEN 'SMALLINT'
		--16. I8 -> BIGINT
		WHEN T.ColumnType='I8' THEN 'BIGINT'
		--17. N -> NUMBER(精度,标度) -> NUMBER(TO_CHAR( DecimalTotalDigits ),TO_CHAR( DecimalFractionalDigits ))
		WHEN T.ColumnType='N' THEN 'NUMBER(' || TO_CHAR( T.DecimalTotalDigits ) || ',' || TO_CHAR( T.DecimalFractionalDigits ) ||')'
		--18. TS -> TIMESTAMP(标度) -> TIMESTAMP(TO_CHAR( DecimalFractionalDigits ))
		WHEN T.ColumnType='TS' THEN 'TIMESTAMP(' || TO_CHAR( T.DecimalFractionalDigits ) || ')'		
		ELSE NULL
	END AS SQL_Combine --SQL合并结果
	/*
	--辅助检查拼接是否正确
	,TO_CHAR( T.ColumnLength ),--字段长度
	TO_CHAR( T.DecimalTotalDigits ),--精度
	TO_CHAR( T.DecimalFractionalDigits )--标度
	--ColumnFormat --格式*/
FROM 
	DBC.Columnsv T 			--系统表 - 表字段信息
	LEFT JOIN DBC.TABLES TT --系统表 - 表信息
		ON T.TableName=TT.TableName AND T.DataBaseName=TT.DataBaseName --库名与表名都一致
WHERE 
	AND T.TABLENAME IN (
	'ACS_DQ01'
	)
	--AND (T.COLUMNNAME <>'REC_SEQ' AND T.ColumnTitle<>'记录条数') --ColunmnTitle为NULLs
	AND (T.COLUMNNAME <>'REC_SEQ' AND COALESCE(T.ColumnTitle,'')<>'记录条数'
ORDER BY 
	T.TableName,--表名
	T.DatabaseName,--库名
	T.ColumnId--序号


  • 20200922补充
--TT.TABLEKIND
	CASE 
		WHEN TT.TableKind = 'A' THEN 'Aggregate function'
		WHEN TT.TableKind = 'B' THEN 'Combined aggregate and ordered analytical function'
		WHEN TT.TableKind = 'D' THEN 'JAR'
		WHEN TT.TableKind = 'E' THEN 'External Stored Procedure'
		WHEN TT.TableKind = 'F' THEN 'Standard function'
		WHEN TT.TableKind = 'G' THEN 'Trigger'
		WHEN TT.TableKind = 'H' THEN 'Instance or Constructor Method'
		WHEN TT.TableKind = 'I' THEN 'Join Index'
		WHEN TT.TableKind = 'J' THEN 'Journal'
		WHEN TT.TableKind = 'M' THEN 'Macro'
		WHEN TT.TableKind = 'N' THEN 'Hash Index'
		WHEN TT.TableKind = 'P' THEN 'SQL Procedure'
		WHEN TT.TableKind = 'Q' THEN 'Queue Table'
		WHEN TT.TableKind = 'R' THEN 'Table function'
		WHEN TT.TableKind = 'S' THEN 'Ordered analytical function'
		WHEN TT.TableKind = 'T' THEN 'SET TABLE'
		WHEN TT.TableKind = 'U' THEN 'User-defined data type'
		WHEN TT.TableKind = 'V' THEN 'View'
		WHEN TT.TableKind = 'X' THEN 'Authorization'
		WHEN TableKind = 'O' THEN 'MULTISET TABLE' -- 可能是INDEX或者UNIQUE INDEX
		ELSE ''
	END AS TableKind,--表类型

查询显示?则表示在TD中表示为NULL值,以下为测试过程

CREATE MULTISET TABLE temp.test_200922 ,NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO
     (
      COL1 varchar(100) TITLE '0',
      COL2 varchar(100) TITLE 'null')
NO PRIMARY INDEX ;

insert into temp.test_200922 values('0',null);

sel * from temp.test_200922;

2.5_2 Teradata数据库 -- 常用系统表之 DBC.Columns 表字段信息_第15张图片


附录

DBC.Columns建表语句

SHOW SEL * FROM DBC.Columns; #或  SHOW ABLE DBC.Columns

CREATE SET TABLE DBC.tvfields ,FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO
     (
      TableId BYTE(6) NOT NULL,
      FieldName VARCHAR(128) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL,
      FieldId SMALLINT FORMAT '---,--9' NOT NULL,
      Nullable CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      FieldType CHAR(2) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      MaxLength INTEGER FORMAT '--,---,---,--9',
      DefaultValue VARCHAR(1024) CHARACTER SET UNICODE NOT CASESPECIFIC,
      DefaultValueI VARBYTE(1024) FORMAT 'X(1024)',
      TotalDigits SMALLINT FORMAT '---,--9',
      ImpliedPoint SMALLINT FORMAT '---,--9',
      FieldFormat VARCHAR(128) CHARACTER SET UNICODE NOT CASESPECIFIC,
      FieldTitle VARCHAR(256) CHARACTER SET UNICODE NOT CASESPECIFIC,
      CommentString VARCHAR(255) CHARACTER SET UNICODE NOT CASESPECIFIC,
      CollationFlag CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      UpperCaseFlag CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      DatabaseId BYTE(4) NOT NULL,
      Compressible CHAR(1) CHARACTER SET LATIN NOT CASESPECIFIC,
      CompressValueList VARCHAR(8192) CHARACTER SET UNICODE NOT CASESPECIFIC,
      FieldStatistics VARBYTE(16383) FORMAT 'X(255)',
      ColumnCheck VARCHAR(8192) CHARACTER SET UNICODE NOT CASESPECIFIC FORMAT 'X(255)',
      CheckCount SMALLINT FORMAT '---,--9' NOT NULL,
      CreateUID BYTE(4),
      CreateTimeStamp TIMESTAMP(0),
      LastAlterUID BYTE(4),
      LastAlterTimeStamp TIMESTAMP(0),
      LastAccessTimeStamp TIMESTAMP(0),
      AccessCount INTEGER FORMAT '--,---,---,--9',
      SPParameterType CHAR(1) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL,
      CharType SMALLINT FORMAT '---,--9',
      LobSequenceNo SMALLINT FORMAT '---,--9',
      IdColType CHAR(2) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      UDTypeId BYTE(6),
      UDTName VARCHAR(128) CHARACTER SET UNICODE UPPERCASE NOT CASESPECIFIC,
      TimeDimension CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      VTCheckType CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      TTCheckType CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      ConstraintId BYTE(4),
      RowTypeTableName VARCHAR(128) CHARACTER SET UNICODE NOT CASESPECIFIC,
      RowTypeDatabaseName VARCHAR(128) CHARACTER SET UNICODE NOT CASESPECIFIC,
      PartitioningColumn CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      ColumnPartitionNumber BIGINT FORMAT 'ZZZZZZZZZZZZZZZZZZ9' NOT NULL,
      ColumnPartitionFormat CHAR(2) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      ColumnPartitionAC CHAR(2) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      PseudoUDTFieldId SMALLINT FORMAT '---,--9',
      PseudoUDTFieldType CHAR(2) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      NetCompression CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      NetConfidentiality CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      NetPolicyLevel CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC)
PRIMARY INDEX ( TableId )
UNIQUE INDEX ( TableId ,FieldId );

CREATE SET TABLE DBC.ObjectUsage ,FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO
     (
      DatabaseId BYTE(4) NOT NULL,
      ObjectId BYTE(6),
      FieldId INTEGER FORMAT '--,---,---,--9',
      IndexNumber SMALLINT FORMAT '---,--9',
      UsageType CHAR(3) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      UserAccessCnt BIGINT FORMAT '--,---,---,---,---,---,--9',
      SysAccessCnt BIGINT FORMAT '--,---,---,---,---,---,--9',
      UserUpdateCnt BIGINT FORMAT '--,---,---,---,---,---,--9',
      UserDeleteCnt BIGINT FORMAT '--,---,---,---,---,---,--9',
      UserInsertCnt BIGINT FORMAT '--,---,---,---,---,---,--9',
      SysUpdateCnt BIGINT FORMAT '--,---,---,---,---,---,--9',
      SysDeleteCnt BIGINT FORMAT '--,---,---,---,---,---,--9',
      SysInsertCnt BIGINT FORMAT '--,---,---,---,---,---,--9',
      LastAccessTimeStamp TIMESTAMP(0),
      LastUsrAccessCntResetTimeStamp TIMESTAMP(0),
      LastSysAccessCntResetTimeStamp TIMESTAMP(0),
      LastUsrUDIResetTimeStamp TIMESTAMP(0),
      LastSysUDIResetTimeStamp TIMESTAMP(0))
PRIMARY INDEX ( DatabaseId ,ObjectId );

CREATE SET TABLE DBC.Dbase ,FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO
     (
      DatabaseNameI VARCHAR(128) CHARACTER SET UNICODE UPPERCASE NOT CASESPECIFIC NOT NULL,
      DatabaseId BYTE(4) NOT NULL,
      OwnerId BYTE(4) NOT NULL,
      EncryptionFlag BYTE(1),
      PasswordSalt BYTE(2),
      EncryptedPassword VARBYTE(512),
      PasswordModTime TIMESTAMP(0),
      ProtectionType CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      JournalFlag CHAR(2) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      PermSpace FLOAT FORMAT '----,---,---,---,--9' NOT NULL,
      SpoolSpace FLOAT FORMAT '----,---,---,---,--9' NOT NULL,
      StartupString VARCHAR(255) CHARACTER SET UNICODE NOT CASESPECIFIC,
      CommentString VARCHAR(255) CHARACTER SET UNICODE NOT CASESPECIFIC,
      AccountName VARCHAR(128) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL,
      CreatorName VARCHAR(128) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL,
      DatabaseName VARCHAR(128) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL,
      JournalId BYTE(6),
      Version SMALLINT FORMAT '---,--9' NOT NULL,
      OwnerName VARCHAR(128) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL,
      NumFallBackTables SMALLINT FORMAT '---,--9' NOT NULL,
      NumLogProtTables SMALLINT FORMAT '---,--9' NOT NULL,
      DefaultDataBase VARCHAR(128) CHARACTER SET UNICODE NOT CASESPECIFIC,
      LogonRules SMALLINT FORMAT '---,--9' NOT NULL,
      AccLogRules SMALLINT FORMAT '---,--9' NOT NULL,
      AccLogUsrRules SMALLINT FORMAT '---,--9' NOT NULL,
      DefaultCollation CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      RowType CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      PasswordChgDate INTEGER FORMAT '--,---,---,--9',
      LockedDate INTEGER FORMAT '--,---,---,--9',
      LockedTime SMALLINT FORMAT '---,--9',
      LockedCount BYTEINT FORMAT '---9',
      UnResolvedRICount SMALLINT FORMAT '---,--9' NOT NULL,
      TimeZoneHour BYTEINT FORMAT '---9',
      TimeZoneMinute BYTEINT FORMAT '---9',
      DefaultDateForm CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      CreateUID BYTE(4),
      CreateTimeStamp TIMESTAMP(0),
      LastAlterUID BYTE(4),
      LastAlterTimeStamp TIMESTAMP(0),
      TempSpace FLOAT FORMAT '----,---,---,---,--9' NOT NULL,
      LastAccessTimeStamp TIMESTAMP(0),
      AccessCount INTEGER FORMAT '--,---,---,--9',
      DefaultCharType SMALLINT FORMAT '---,--9',
      RoleName VARCHAR(128) CHARACTER SET UNICODE NOT CASESPECIFIC,
      ProfileName VARCHAR(128) CHARACTER SET UNICODE NOT CASESPECIFIC,
      UDFLibRevision INTEGER FORMAT '--,---,---,--9' NOT NULL,
      AppCat1Revision INTEGER FORMAT '--,---,---,--9' NOT NULL,
      AppCat2Revision INTEGER FORMAT '--,---,---,--9' NOT NULL,
      AppCat3Revision INTEGER FORMAT '--,---,---,--9' NOT NULL,
      AppCat4Revision INTEGER FORMAT '--,---,---,--9' NOT NULL,
      JarLibRevision INTEGER FORMAT '--,---,---,--9' NOT NULL,
      TimeZoneString VARCHAR(128) CHARACTER SET UNICODE NOT CASESPECIFIC,
      CalendarName VARCHAR(128) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL,
      ExportDefinitionName VARCHAR(30) CHARACTER SET LATIN NOT CASESPECIFIC,
      ExportWidthRuleSet BYTE(20),
      NetCompression CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      NetConfidentiality CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      NetPolicyLevel CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      ZoneID BYTE(4) NOT NULL,
      DBA CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      ExtraField1 CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      ExtraField2 BYTE(4),
      ExtraField3 VARCHAR(256) CHARACTER SET LATIN CASESPECIFIC,
      ExtraField4 INTEGER FORMAT '--,---,---,--9',
      ExtraField5 FLOAT FORMAT '----,---,---,---,--9',
      GPLLibRevision INTEGER FORMAT '--,---,---,--9' NOT NULL,
      NewFlag CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC)
UNIQUE PRIMARY INDEX ( DatabaseNameI )
UNIQUE INDEX ( DatabaseId );

CREATE SET TABLE DBC.udtinfo ,FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO
     (
      TypeId BYTE(6) NOT NULL,
      DatabaseId BYTE(4) NOT NULL,
      TypeName VARCHAR(128) CHARACTER SET UNICODE UPPERCASE NOT CASESPECIFIC NOT NULL,
      TypeKind CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      INSTANTIABLE CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      FINAL CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      Encryption CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      Compression CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      OperatorAll CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      DefaultTransformGroup VARCHAR(128) CHARACTER SET UNICODE UPPERCASE NOT CASESPECIFIC,
      OrderingForm CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      OrderingCategory CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      OrderingRoutineId BYTE(6),
      CastCount BYTEINT FORMAT '--9' NOT NULL,
      ExtFileReference VARCHAR(1000) CHARACTER SET UNICODE CASESPECIFIC FORMAT 'X(255)',
      DefaultNull CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      ArrayNumDimensions BYTEINT FORMAT '--9',
      ArrayScope VARCHAR(3200) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC FORMAT 'X(45)')
UNIQUE PRIMARY INDEX ( TypeId );

CREATE SET TABLE DBC.TVM ,FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO
     (
      DatabaseId BYTE(4) NOT NULL,
      TVMNameI VARCHAR(128) CHARACTER SET UNICODE UPPERCASE NOT CASESPECIFIC NOT NULL,
      LogicalHostId SMALLINT FORMAT 'ZZZ9',
      SessionNo INTEGER FORMAT '--,---,---,--9',
      TVMId BYTE(6) NOT NULL,
      TableKind VARCHAR(5) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      ProtectionType CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      TempFlag CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      HashFlag CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      NextIndexId SMALLINT FORMAT '---,--9' NOT NULL,
      NextFieldId SMALLINT FORMAT '---,--9' NOT NULL,
      Version SMALLINT FORMAT '---,--9' NOT NULL,
      RequestText VARCHAR(12500) CHARACTER SET UNICODE NOT CASESPECIFIC FORMAT 'X(255)',
      CreateText VARCHAR(13000) CHARACTER SET UNICODE NOT CASESPECIFIC FORMAT 'X(255)',
      CommentString VARCHAR(255) CHARACTER SET UNICODE NOT CASESPECIFIC,
      CreatorName VARCHAR(128) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL,
      TVMName VARCHAR(128) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL,
      JournalFlag CHAR(2) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL,
      JournalId BYTE(6),
      UtilVersion SMALLINT FORMAT '---,--9',
      AccLogRules CHAR(1) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL,
      ColumnAccRules SMALLINT FORMAT '---,--9' NOT NULL,
      CheckOpt CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      ParentCount SMALLINT FORMAT '---,--9' NOT NULL,
      ChildCount SMALLINT FORMAT '---,--9' NOT NULL,
      NamedTblCheckCount SMALLINT FORMAT '---,--9' NOT NULL,
      UnnamedTblCheckExist CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      PrimaryKeyIndexId SMALLINT FORMAT '---,--9',
      CreateUID BYTE(4),
      CreateTimeStamp TIMESTAMP(0),
      LastAlterUID BYTE(4),
      LastAlterTimeStamp TIMESTAMP(0),
      TriggerCount SMALLINT FORMAT '---,--9' NOT NULL,
      CommitOpt CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      TransLog CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      LastAccessTimeStamp TIMESTAMP(0),
      AccessCount INTEGER FORMAT '--,---,---,--9',
      SPObjectCodeRows INTEGER FORMAT '--,---,---,--9' NOT NULL,
      RSGroupID INTEGER FORMAT '--,---,---,--9',
      TblRole CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      TblStatus CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      RequestTxtOverflow CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      CreateTxtOverflow CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      QueueFlag CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC NOT NULL,
      XSPExternalName CHAR(30) CHARACTER SET LATIN CASESPECIFIC,
      XSPOptions CHAR(5) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      XSPExtFileReference VARCHAR(1000) CHARACTER SET UNICODE CASESPECIFIC FORMAT 'X(255)',
      ExecProtectionMode CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      CharacterType SMALLINT FORMAT '---,--9',
      Platform CHAR(8) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      AuthIdUsed BYTE(6) FORMAT 'X(8)',
      AuthorizationType CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      AuthorizationSubType CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      OSDomainName VARCHAR(256) CHARACTER SET LATIN CASESPECIFIC,
      OSUserName VARCHAR(256) CHARACTER SET LATIN CASESPECIFIC,
      SecInfo VARBYTE(256),
      AuthName VARCHAR(128) CHARACTER SET UNICODE UPPERCASE NOT CASESPECIFIC,
      TemporalProperty CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      ResolvedCurrent_Date DATE FORMAT 'YY/MM/DD',
      ResolvedCurrent_Timestamp TIMESTAMP(6) WITH TIME ZONE FORMAT 'YYYY-MM-DDBHH:MI:SS.S(F)Z',
      SystemDefinedJI CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      VTQualifier CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      TTQualifier CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      MACFlag CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      PIColumnCount SMALLINT FORMAT 'ZZZZ9' NOT NULL,
      PartitioningLevels SMALLINT FORMAT 'ZZZZ9' NOT NULL,
      NetCompression CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      NetConfidentiality CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      NetPolicyLevel CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      SDInfo VARBYTE(256) FORMAT 'X(256)',
      LoadProperty CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      ExtraField4 SMALLINT FORMAT '---,--9',
      LoadIdLayout CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      DelayedJI CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      ExtraField1 CHAR(1) CHARACTER SET LATIN UPPERCASE NOT CASESPECIFIC,
      ExtraField2 BYTE(4),
      ExtraField3 VARCHAR(256) CHARACTER SET LATIN CASESPECIFIC,
      CurrentLoadId INTEGER FORMAT '--,---,---,--9',
      ExtraField5 FLOAT FORMAT '----,---,---,---,--9')
UNIQUE PRIMARY INDEX ( DatabaseId ,TVMNameI )
UNIQUE INDEX ( TVMId )
INDEX ( TVMName );

REPLACE VIEW DBC.Columns
  (DatabaseName,TableName,ColumnName,ColumnFormat,ColumnTitle,
   SPParameterType,ColumnType,ColumnUDTName,ColumnLength,DefaultValue,
   Nullable,CommentString,DecimalTotalDigits,DecimalFractionalDigits,
   ColumnId,UpperCaseFlag,Compressible,CompressValue,
   ColumnConstraint, ConstraintCount,
   CreatorName, CreateTimeStamp, LastAlterName, LastAlterTimeStamp,
   CharType, IdColType, AccessCount, LastAccessTimeStamp,
   CompressValueList, TimeDimension, VTCheckType, TTCheckType, ConstraintId,
   ArrayColNumberOfDimensions, ArrayColScope, ArrayColElementType, ArrayColElementUdtName)
AS
SELECT (CAST(SUBSTRING(TRANSLATE(dbase.DatabaseName USING UNICODE_TO_LOCALE WITH ERROR) FROM 1 FOR 30)
             AS CHAR(30))),
       (CAST(SUBSTRING(TRANSLATE(tvm.TVMName USING UNICODE_TO_LOCALE WITH ERROR) FROM 1 FOR 30)
             AS CHAR(30))),
       (CAST(SUBSTRING(TRANSLATE(tvfields.FieldName USING UNICODE_TO_LOCALE WITH ERROR) FROM 1 FOR 30)
             AS CHAR(30))),
       (CAST(SUBSTRING(tvfields.FieldFormat FROM 1 FOR 30) AS CHAR(30))),
       (CAST(SUBSTRING(tvfields.FieldTitle FROM 1 FOR 60) AS VARCHAR(60))),
       tvfields.SPParameterType,
       tvfields.FieldType,
       (CAST(SUBSTRING(TRANSLATE(tvfields.UDTName USING UNICODE_TO_LOCALE WITH ERROR) FROM 1 FOR 30)
             AS CHAR(30))),
       tvfields.MaxLength(FORMAT 'Z,ZZZ,ZZZ,ZZ9'),
       tvfields.DefaultValue,
       tvfields.Nullable,
       tvfields.CommentString,
       tvfields.TotalDigits(FORMAT '-ZZ9'),
       tvfields.ImpliedPoint(FORMAT '-ZZ9'),
       tvfields.FieldId,
       tvfields.UpperCaseFlag,
       tvfields.Compressible,
       NULL,
       TRANSLATE(tvfields.ColumnCheck USING UNICODE_TO_LOCALE WITH ERROR),
       tvfields.CheckCount,
       (CAST(SUBSTRING(TRANSLATE(DB1.DatabaseName USING UNICODE_TO_LOCALE WITH ERROR) FROM 1 FOR 30)
             AS CHAR(30))),
       tvfields.CreateTimeStamp,
       (CAST(SUBSTRING(TRANSLATE(DB2.DatabaseName USING UNICODE_TO_LOCALE WITH ERROR) FROM 1 FOR 30)
             AS CHAR(30))),
       tvfields.LastAlterTimeStamp,
       tvfields.CharType,
       tvfields.IdColType,
       OU.UserAccessCnt,
       OU.LastAccessTimeStamp,
       tvfields.CompressValueList,
       tvfields.TimeDimension,
       tvfields.VTCheckType,
       tvfields.TTCheckType,
       tvfields.ConstraintId,
       udt1.ArrayNumDimensions (NAMED ArrayColNumberOfDimensions),
       udt1.ArrayScope (NAMED ArrayColScope),
       tvf2.FieldType (NAMED ArrayColElementType),
       CAST(SUBSTRING(TRANSLATE(tvf2.UDTName USING UNICODE_TO_LOCALE WITH ERROR) FROM 1 FOR 30)
              AS CHAR(30)) (NAMED ArrayColElementUdtName)
FROM DBC.tvfields
         LEFT OUTER JOIN DBC.ObjectUsage OU
                      ON OU.DatabaseId = DBC.TVFields.DatabaseId
                     AND OU.ObjectId = DBC.TVFields.TableId
                     AND OU.FieldId = DBC.TVFields.FieldId
                     AND OU.IndexNumber IS NULL
                     AND OU.UsageType = 'DML'
         LEFT OUTER JOIN DBC.Dbase DB1
                      ON DBC.tvfields.CreateUID = DB1.DatabaseID
         LEFT OUTER JOIN DBC.Dbase DB2
                      ON DBC.tvfields.LastAlterUID = DB2.DatabaseID
         LEFT OUTER JOIN DBC.tvfields tvf2
                      ON DBC.tvfields.UDTypeId=tvf2.TableId AND
                         DBC.tvf2.FieldName = 'ARRAYELEMENT' AND
                         (DBC.tvfields.FieldType='A1' OR
                         DBC.tvfields.FieldType='AN')
         LEFT OUTER JOIN DBC.udtinfo udt1
                      ON DBC.tvfields.UDTypeId=udt1.TypeId AND (DBC.tvfields.FieldType='A1' OR
                                                                DBC.tvfields.FieldType='AN'),
          DBC.Dbase, DBC.TVM
WHERE   tvm.DatabaseId = dbase.DatabaseId
        AND     tvm.tvmid = tvfields.tableid WITH CHECK OPTION;

VARCHAR 字段长度测试

参考文章 2.【Teradata】TD Unicode编码格式下varchar定义测试
在SQL获取字段信息时拼接 CHAR / VARCHAR 类型时将长度与编码格式有关,下面请看测试结果

show TABLE TEMP.TEST20200706;
 
CREATE MULTISET TABLE TEMP.TEST20200706 ,
     NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO
(
      EWID VARCHAR(1) CHARACTER SET LATIN CASESPECIFIC,
      NAME VARCHAR(1) CHARACTER SET UNICODE CASESPECIFIC,
      DWDESC VARCHAR(2) CHARACTER SET UNICODE CASESPECIFIC
) NO PRIMARY INDEX ;
select tablename,columnname,columnlength from dbc.columnsv
where trim(tablename) ='TEST20200706' ORDER BY 3 ASC
 
tablename   columnname   columnlength
--------------------------------------------------
 TEST20200706 	EWID      1		--LATIN  	中英文不确定,td中建表结果显示占用1字节
 TEST20200706 	NAME      2		--UNICODE	中英文均为 占用2字节
 TEST20200706 	DWDESC    4		--UNICODE	中英文均为 占用2字节

长度、精度、标度

见 (Oracle/MySQL/SQLServer)数据类型之长度、精度、标度

长度:占计算机存储容量,在上图中显示的Length表示长度,单位为字节 例如:int类型占用4个字节
精度:指数字的位数。例如:数 123.45 的精度是 5
标度:指小数点后的数字位数。 例如:数 123.45 的标度是 2。

bit --位:位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为“0”或“1”。
byte --字节:字节是计算机存储容量的基本单位,一个字节由8位二进制数组成。在计算机内部,一个字节可以表示一个数据,也可以表示一个英文字母,两个字节可以表示一个汉字。
1Byte=8bit (1B=8bit)
1KB=1024Byte(字节)=8*1024bit
1MB=1024KB
1GB=1024MB
1TB=1024GB

  • 在DDL语句中,长度,精度,标度 都会用到
  • numeric(m,n)
    • m : 精度(有效位数)
    • n : 标度 (小数点后位数)
  • char(n)
    • n : 长度(占计算机存储字节容量)

编码方式对比 (ASCII/IOS8859-1/UNICODE/UTF-8/GBK)

编码格式 中/Eng 占用字节 优点 缺点 备注
ASCII Eng
1 Byte
不支持中文
单字节,空间小 不支持中文 7 Bit字符集
最简单的英文编码方案
编码从0到127
ISO-8859-1 Eng
1 Byte
不支持中文
单字节,空间小 不支持中文
不同国家编码
128-255不同
8 Bit字符集
有些环境下写作Latin-1
又叫ANSI编码 (非ASCII编码)
向下兼容ASCII
UNICODE Eng
2 Byte
2 Byte
国际组织编码,容纳世界上所有的文字和符号的字符编码 不利于英文传输/存储 在计算机内存中,统一使用Unicode编码,
当需要保存到硬盘或者需要传输的时候,
就转换为UTF-8编码。
用记事本编辑的时候,
从文件读取的UTF-8字符被转换为Unicode字符到内存里,
编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。
向下兼容 ISO-8859-1
UTF-8 Eng
1 Byte
3~4Byte
变长的编码方式
1-6 Byte
英文占用空间小
且支持中文
不利于中文传输/存储 3 Byte:常用汉字
4 Byte:中文生僻字
UTF-8就是在互联网上使用最广的一种Unicode的实现方式
如字节第一位0 -> 分两种情况
—情况1.单字节开头
—情况2.多字节的结尾
如字节第一位1 ->多字节
(连续1的数量=字符占用字节数)
向下兼容ASCII
UTF-16 Eng
4 Byte
4 Byte
资料不全
UTF-16BE Eng
2 Byte
2 Byte
资料不全
UTF-16LE Eng
2 Byte
2 Byte
资料不全
GB2312、GBK Eng
2 Byte
2 Byte
数据库占用空间比UTF-8少1/3 国际性兼容不好
外国访问出现乱码
汉字字符编码方案的国家标准
向下兼容ASCII

UTF-8和Unicode与GBK的关系

utf-8--------decode(解码)----->>Unicode类型<<-------decode(解码)-----gbk

utf-8<<--------encode(编码)-----Unicode类型-------encode(编码)----->>gbk


相关文章

(Oracle/MySQL/SQLServer)数据类型之长度、精度、标度

参考文章

1.teradata数据库–常用的数据字典表 — _假象
2.【Teradata】TD Unicode编码格式下varchar定义测试
3.编码方式的简介(ASCII, LATIN-1, UTF-8/16/32) — virgilli
4.unicode和utf-8互转 — CTHON
5.ASCII,Latin1,Unicode,UTF-8与GBK编码的区别
6.Teradata Database Data Dictionary:Teradata数据库数据字典


20/07/06

M

你可能感兴趣的:(#,2.5,TeraData,Teradata基础知识,数据库)