欢迎投稿

今日深度:

teradata数据库--常用的数据字典表,

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;

www.htsjk.Com true http://www.htsjk.com/teradata/28954.html NewsArticle teradata数据库--常用的数据字典表, (仅供参考,有错误请指出) teradata使用过程中我们多多少需要查看下 created objects的相关信息,对于查看表结构一句 SHOW TABLE TNAME 就可以完全胜任。...
相关文章
    暂无相关文章
评论暂时关闭