Найти все несжатые таблицы в Teradata

#sql #database #compression #teradata

#sql #База данных #сжатие #teradata

Вопрос:

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

Пока я делаю это вручную, используя

 SHOW TABLE <TABLE_NAME>
  

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

Есть ли столбец или таблица, в которой я могу запрашивать такие таблицы, например, я могу проверить наличие макроса —

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

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

Ответ №1:

Вы можете найти все сжатые столбцы:

 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. Есть ли разница между dbc.TablesV и dbc.Tables ?

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

Ответ №2:

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

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

кстати, в y нашем запросе, почему вы выбираете tablekind=’M’, он не вернет детали таблицы, но вернет детали макроса.

Комментарии:

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

Ответ №3:

Как вы упомянули, сжатие — это скорее «вещь столбца», а не «вещь таблицы», поэтому вам лучше проверить метаданные столбца:

Это возможный запрос (который необходимо улучшить):

   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. Это вернет все макросы / SPS / Представления и т. Д., Которые вам нужно присоединить к dbc. TablesV, чтобы получить table_kind ‘T’ .

2. @dnoeth Правильно, спасибо.. Я также добавил table_kind ‘O’ для таблиц nopi.

3. Спасибо, я тоже забыл об этом 🙂