在 Teradata 中查找所有未压缩的表
Find all uncompressed tables in Teradata
有没有办法在 teradata 中找到所有未压缩的 table?
到目前为止,我是通过使用
手动完成的
SHOW TABLE <TABLE_NAME>
并检查列是否有 COMPRESS
关键字。如果我有 100 个 tables.
,这会变得很乏味
是否有一个列或 table 我可以在其中查询此类 table 之类的东西,比如我可以检查宏 -
SELECT * FROM dbc.tables WHERE tablekind='M' AND databasename='database'
感谢任何帮助。
如您所述,压缩更像是 "column thing" 而不是 "table thing",因此您最好检查列元数据:
可能的查询(有待改进):
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
您可以找到所有压缩列:
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
)
您可以为此使用 dbc table 列。 Compressible = 'C' 将为您提供这些值。
select databasename,tablename,columnname,compressible
from dbc.columns
where compressible in ('A','C')
顺便说一句,在我们的查询中,您为什么选择 tablekind='M',它不会 return table 的详细信息,但会 return宏的细节。
有没有办法在 teradata 中找到所有未压缩的 table?
到目前为止,我是通过使用
手动完成的SHOW TABLE <TABLE_NAME>
并检查列是否有 COMPRESS
关键字。如果我有 100 个 tables.
是否有一个列或 table 我可以在其中查询此类 table 之类的东西,比如我可以检查宏 -
SELECT * FROM dbc.tables WHERE tablekind='M' AND databasename='database'
感谢任何帮助。
如您所述,压缩更像是 "column thing" 而不是 "table thing",因此您最好检查列元数据:
可能的查询(有待改进):
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
您可以找到所有压缩列:
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
)
您可以为此使用 dbc table 列。 Compressible = 'C' 将为您提供这些值。
select databasename,tablename,columnname,compressible
from dbc.columns
where compressible in ('A','C')
顺便说一句,在我们的查询中,您为什么选择 tablekind='M',它不会 return table 的详细信息,但会 return宏的细节。