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


相关链接


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

DBC.Columnsv 与上视图结构类似,本文没有深入研究。
在这里插入图片描述
在这里插入图片描述

一.前言

在进行推送工作时,一般从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键
    手动删除表头表尾
    在这里插入图片描述

  • 清洗第二步(Excel)
    在这里插入图片描述

  • 第三步:邮件通知 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函数进行匹配

在这里插入图片描述
这里可以很清楚看出映射关系

字段类型ColumnType映射值拼接规则
CFCHARa. ASCII编码(LATIN) :CHAR(长度)
b. UNICODE编码 : CHAR(长度/2)
CVVARCHARa. ASCII编码(LATIN) : VARCHAR(长度)
b. UNICODE编码 : VARCHAR(长度/2)
DDECIMALDECIMAL(精度,标度)
DADATEDATE FORMAT ‘格式’
IINTEGERINTEGER
I8BIGINTBIGINT
  • 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中新的字段类型映射关系在这里插入图片描述

  • 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个字段的映射信息
    在这里插入图片描述
字段类型ColumnType映射值拼接规则
BFBYTEBYTE(长度)
BVVARBYTEVARBYTE(长度)
CFCHARa. ASCII编码(LATIN) :CHAR(长度)
b. UNICODE编码 : CHAR(长度/2)
CVVARCHARa. ASCII编码(LATIN) :VARCHAR(长度)
b. UNICODE编码 : VARCHAR(长度/2)
DDECIMALDECIMAL(精度,标度)
DADATEDATE FORMAT ‘格式’
FFLOATFLOAT
IINTEGERINTEGER
I1BYTEINTBYTEINT
I2SMALLINTSMALLINT
I8BIGINTBIGINT
TSTIMESTAMPTIMESTAMP (标度)
  • 下面重复STEP 4-6 步骤操作,直到获取所有字段类型的映射关系

3.2 特殊类型的表 Method ,Function

其中某些表不可以查看表结构,比如
在这里插入图片描述
执行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

在这里插入图片描述
在这里插入图片描述
可以知道
N=> NUMBER
++ => TD_ANYTYPE

PS:除了Function其他类型的还有User Defined TypeMethod
在这里插入图片描述


四.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 字段
3ATTIME系统Method
SYSUDTLIB.INTPRDTIMETYPE_CONSTR1
P1字段
4BFBYTEBYTE固定 4 字节
5BOBLOBBLOBBinary Large Object
二进制大对象,是一个可以存储二进制文件的容器。
写为 BLOB 与 BLOB(10285760) 效果相同
6BVVARBYTEVARBYTE
7CFCHARa. ASCII编码(LATIN) :CHAR(长度)
b. UNICODE编码 : CHAR(长度/2)
ColumnType (ColumnLength)
8COCLOBCLOBCharacter Large Object
它将字符大对象存储为数据库表某一行中的一个列值
写为 CLOB 或 CLOB(2097088000) 效果相同
9CVVARCHARa. ASCII编码(LATIN) : VARCHAR(长度)
b. UNICODE编码 : VARCHAR(长度/2)
ColumnType (ColumnLength)
10DDECIMAL
DECIMAL (精度,标度)
ColumnType ( DecimalTotalDigits ,DecimalFractionalDigits)
根据长度自动分配
字节长度取值范围为 [1,2,4,8,16]
11DADATEDATE FORMAT ‘格式’ColumnType FORMAT ‘ColumnFormat’
12DSDAY TO SECOND系统Method
TD_SYSFNLIB .NUMTODSINTERVAL
RETURN0 字段
13FFLOATFLOAT
14IINTEGERINTEGER固定4 字节
15I1BYTEINTBYTEINT固定 1 字节
16I2SMALLINTSMALLINT固定 2 字节
17I8BIGINTBIGINT固定 8 字节
18JNJSON系统Method
SYSUDTLIB .JSON_COMBINE_UU1_LOB
SELF字段
19NNUMBERNUMBER(精度,标度)固定18字节
20PDPINTERNALPERIODDATETYPE系统Method
SYSUDTLIB .IntPeriodDateType_P_Intersect
SELF字段
21PMINTERNALPERIODTIMESTAMPWTZTYPE系统Method
SYSUDTLIB .INTPRDTSWTZTYPE_NORMALIZE1
SELF字段
22PSPERIOD(TIMESTAMP)系统Function
TD_SYSFNLIB.TD_NORMALIZE_OVERLAP2
duration 字段
23PTINTERNALPERIODTIMETYPE系统Method
SYSUDTLIB.INTPRDTIMETYPE_CONSTR1
SELF 字段
24PZINTERNALPERIODTIMEWTZTYPE系统Method
SYSUDTLIB.INTPRDTIMEWTZTYPE_CONSTR1
SELF 字段
25SZTIMESTAMP WITH TIMEZONE系统Function
TD_SYSFNLIB.Months_Between_tswz
input_param1 字段
26TSTIMESTAMPTIMESTAMP(标度)常用的有 TIMESTAMP(0) 和 TIMESTAMP(6)
27TZTIME WITH TIMEZONE系统Method
SYSUDTLIB.INTPRDTIMEWTZTYPE_CONSTR1
P1 字段
28UTVARIANT_TYPE系统Function
TD_SYSFNLIB.TD_NORMALIZE_OVERLAP2
inK 字段
29VATD_VALIST系统Function
TD_SYSFNLIB.XMLAGG
expr 字段
30XMXML系统Function
TD_SYSFNLIB.XMLPUBLISH_GENSQL
xslt 字段
31YMYEAR TO MONTH系统Function
TD_SYSFNLIB.NUMTOYMINTERVAL
RETURN0 字段

由于不能确定DBC.Colums表哪个字段代表编码分类,所以不能通过 LENGTH 字段去拼接数据格式,所以我采用了通过截取ColumnFormat的方式来拼接字符类型长度
在这里插入图片描述

五.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

这样就可以方便的得到标准格式的数据类型了
在这里插入图片描述
对比EXCEL手动清洗结果
在这里插入图片描述
这样就可以通过替换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;

在这里插入图片描述


附录

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值