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

  • Post author:
  • Post category:其他



相关链接




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 映射值 拼接规则
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中新的字段类型映射关系
在这里插入图片描述

  • 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 映射值 拼接规则

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

其中某些表不可以查看表结构,比如

在这里插入图片描述

执行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 Type



Method


在这里插入图片描述




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

的方式来拼接字符类型长度

在这里插入图片描述



五.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 占用字节 优点 缺点 备注
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



版权声明:本文为qq_43529621原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。