teradata数据库--常用的数据字典表,
(仅供参考,有错误请指出)
teradata使用过程中我们多多少需要查看下 created objects的相关信息,对于查看表结构一句SHOW TABLE TNAME就可以完全胜任。假设我们有诸如一下的需求呢:
这时候我们需要借助teradata提供相关数据字典view去完成此类操作。
在此本文列出了teradata中常用的数据字典表,更多的请阅读teradata的官方文档。所有的字典表和视图都在DBC用户下
我们比较常用的字典表视图:
有关字典的结构可以SHOW VIEW VNAME 查看
字典Tables 的常用字段:
解决问题:统计下某库下总共有多少个view 多少个Macro 多少个Stored Procedure
SQL:
SELECT COUNT(TABLENAME)
FROM DBC.TABLES
WHERE TABLEKIND = 'T' -- TABLEKIND = 'V'视图 TABLEKIND = 'M' 宏
AND DATABANAME = 'XXX'
解决问题:查看那些表是FALLBACK或者NO FALLBACK
SELECT DISTINCT TRIM(DataBaseName) || '.' || TableName AS TableName
FROM DBC.TABLES
WHERE ProtectionType = 'F' --ProtectionType = 'N'
解决问题:查询某表最近一次做了那些更改
SQL:
SELECT RequestText FROM DBC.TABLES WHERE TableName = 'XXX'
ShowTblChecks 的常用字段:
解决问题:产看表的约束
SQL:
SELECT TRIM(DataBaseName) || '.' || TableName AS TableName,
CheckName,
TblCheck
FROM dbc.ShowTblChecks
WHERE TableName = 'XXXX';
Columns常用的字段:
ColumnType主要类型:
I = INTEGER
F = Float
DA = Date
CV = VARCHAR
I2 = SMALLINT
D = Decimal
CF = Character Fixed(CHAR)
CV = VARCHAR
这些信息足够我们去还原一张表的具体信息
假设我们有这样的需求,统计各个表有多少个指标(类型为Decimal代表指标),是否有时间维度(format 包含 YYYY-MM-DD 的为时间维度)
SQL统计各个表的指标个数:
SELECT TRIM(DataBaseName) || '.' || TableName AS TableName,
COUNT(ColumnType) AS COUNT_IN
FROM DBC.Columns
WHERE ColumnType = 'D'
AND DATABASENAME = 'XXX'
--AND TABLENAME = 'XXXX'
GROUP BY 1
Indices 主要字段:
IndexType
P = Primary
S = Secondary
K = Primary Key
J = Join
U = Unique Constraint
解决问题:查询那些表是以XXXX列为PI的
SQL:
FROM DBC.Indices
WHERE IndexType = 'P'
and ColumnName = 'XXXXX'
AND DatabaseName = 'XXXXX'
PartitioningConstraintsV主要字段:
DiskSpace主要为管理员所有在此略过
TableSize 这张表相对来说比较重要,可以使用此表查询我们建的表PI选择是否合理,主要字段:
我们知道teradata是MPP架构的数据库,因此它也面临着“木桶效应”的问题。何为木桶效应,简单说就是一个木桶能装多少水并不是由这个木桶最长的那个木板决定,而是有最短的那个决定的。适用在teradata上可以理解为整个数据库的性能并不由最先完成数据处理的节点决定的,而是由那个最慢的节点决定的。因此假设一个节点过慢必将 拖慢整个数据处理的任务。而,“数据倾斜”将引发“木桶效应”,因此我们必须将我们大表的倾斜度控制在一个指标之内。
而利用TableSize 这个视图我们可以检索出我们仓库数据倾斜度不在我们指标之内的。
teradata数据倾斜度的计算方法:Skew = (max-avg)/avg*100
SQL计算数据倾斜度:
SELECT T1.DATABASENAME, --库名
T1.TABLENAME, --表名
T1.SPACE_SUM, --表大小
T1.SPACE_MAX, --最大AMP大小
T1.SPACE_AVG, --平均AMP大小
T1.SKEWFACTOR --PI倾斜度
FROM (SELECT DATABASENAME,
TABLENAME,
SUM(CURRENTPERM) / 1000 / 1000 AS SPACE_SUM,
MAX(CURRENTPERM) / 1000 / 1000 AS SPACE_MAX,
AVG(CURRENTPERM) / 1000 / 1000 AS SPACE_AVG,
(SPACE_MAX - SPACE_AVG) / SPACE_MAX * 100 AS SKEWFACTOR
FROM DBC.TABLESIZE
WHERE DATABASENAME = 'DTEMP'
AND UPPER(TABLENAME) NOT LIKE '%_MI_%'
AND UPPER(TABLENAME) NOT LIKE '%_MS_%'
GROUP BY 1, 2) T1
WHERE T1.SKEWFACTOR >= 30
ORDER BY SKEWFACTOR DESC;