#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. Спасибо, я тоже забыл об этом 🙂