目录
相关链接
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