2015-10-28 1 views
3

При попытке выполнить различные настройки сжатия в Redshift было бы очень полезно знать размер каждого столбца. Я знаю, как получить размер таблицы, но я хочу знать размер каждого отдельного столбца в этой таблице.Как узнать размер каждого столбца в таблице Redshift?

ответ

7

Этот запрос даст вам размер (МБ) каждого столбца. Что он делает, так это то, что он подсчитывает количество блоков данных, где каждый блок использует 1 МБ, сгруппированные по таблице и столбцу.

SELECT 
    TRIM(name) as table_name, 
    TRIM(pg_attribute.attname) AS column_name, 
    COUNT(1) AS size 
FROM 
    svv_diskusage JOIN pg_attribute ON 
    svv_diskusage.col = pg_attribute.attnum-1 AND 
    svv_diskusage.tbl = pg_attribute.attrelid 
GROUP BY 1, 2 

Вы можете прочитать больше о двух таблиц, участвующих в запросе здесь: SVV_DISKUSAGE & pg_attribute.

0

Более точный размер таблицы будет включать скрытые системные столбцы deletexid, insertxid, oid (ROW ID), а также. Одна из моих таблиц использовала 752 блока без включения скрытых столбцов. Когда я добавил скрытые столбцы, он пошел до 1063 блоков.

SELECT col, attname, COUNT(*) AS "mbs" 
FROM stv_blocklist bl 
JOIN stv_tbl_perm perm 
    ON bl.tbl = perm.id AND bl.slice = perm.slice  
LEFT JOIN pg_attribute attr ON 
    attr.attrelid = bl.tbl 
    AND attr.attnum-1 = bl.col 
WHERE perm.name = '<TABLE-NAME>' 
GROUP BY col, attname 
ORDER BY col; 
Смежные вопросы