2016-10-18 10 views
0

Есть ли способ найти все несжатые таблицы в teradata?Найти все несжатые таблицы в Teradata

До сих пор я делаю это вручную с помощью

SHOW TABLE <TABLE_NAME> 

и проверить, если столбец имеет COMPRESS ключевое слово. Это становится очень утомительным, если у меня есть 100 столов.

Есть ли столбец или таблица, где я могу запросить такие таблицы то, что я могу проверить для макросъемки -

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

Любая помощь приветствуется.

ответ

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 
) 
+0

Есть ли разница между 'dbc.TablesV' и' dbc.Tables'? –

+0

@PirateX: Конечно, все не-V-представления являются устаревшими с TD12 и больше не должны использоваться. Когда вы находитесь на TD14.10 + и используете имена объектов длиной более 30 символов, 'dbc.Tables' усекает их. – dnoeth

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 
+1

Это вернет все макросы/SP/Views и т. Д., Вам нужно присоединиться к dbc.TablesV, чтобы получить TableKind 'T'. – dnoeth

+0

@dnoeth Правильно, спасибо .. Я также добавил tablekind 'O' для таблиц nopi. – Insac

+0

Спасибо, я тоже об этом забыл :) – dnoeth

0

Для этого можно использовать столбцы таблицы dbc. Сжатие = 'C' даст вам эти значения.

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

кстати в у нашего запроса, почему вы выбрали tablekind = «M», он не будет возвращать детали таблицы, но будет возвращать детали макроса.

+0

Вы должны переключиться на 'where compressible in ('A', 'C')', иначе вы опускаете столбцы с алгоритмическим сжатием. – dnoeth