在Teradata中查找所有未压缩的表

时间:2016-10-18 07:50:00

标签: sql database compression teradata

有没有办法在teradata中找到所有未压缩的表?

到目前为止,我正在使用

手动完成
SHOW TABLE <TABLE_NAME>

并检查列是否包含COMPRESS个关键字。如果我有100张桌子,这会变得很繁琐。

是否有一个列或表,我可以查询这些表,就像我可以检查宏 -

SELECT * FROM dbc.tables WHERE tablekind='M' AND databasename='database'

感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

您可以找到所有压缩列:

select * from dbc.ColumnsV 
where CompressValueList is not null

获取没有任何压缩的表:

SELECT * FROM dbc.TablesV
WHERE TableKind IN ('T', 'O') -- both PI and NoPI tables
AND (DatabaseName, TableName) NOT IN 
 (
   SELECT DatabaseName, TableName 
   FROM dbc.columnsv
   WHERE CompressValueList IS NOT NULL
 )

答案 1 :(得分:0)

正如您所提到的,压缩更像是一个“列事物”,而不是“表格事物”,因此您最好检查列元数据:

这是一个可能的查询(有待改进):

  select  t.tablename, sum(case when compressvaluelist is null then 0 else 1 end) compressed_cols, count(*) cols  
    from dbc.ColumnsV c join dbc.TablesV t on (c.tablename=t.tablename and c.databasename=t.databasename) 
   where t.databasename='<databasename>'
     and t.tablekind in ('T','O')
   group by 1    
  having compressed_cols=0

答案 2 :(得分:0)

您可以使用dbc表列。 Compressible ='C'会给你这些值。

select databasename,tablename,columnname,compressible
from dbc.columns
where compressible in ('A','C')

在我们的查询中为什么你选择tablekind ='M',它不会返回表的细节但会返回宏的细节。