While trying out different compression settings in Redshift it would be very useful to know the size of each column. I know how to get the size of a table, but I want to know the size of each individual column in that table.
Asked
Active
Viewed 6,181 times
2 Answers
8
This query will give you the size (MB) of each column. What it does is that it counts the number of data blocks, where each block uses 1 MB, grouped by table and column.
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
You can read more about the two tables involved in the query here: SVV_DISKUSAGE & pg_attribute.
Theo
- 131,503
- 21
- 160
- 205
karinsofiapaulina
- 315
- 2
- 8
3
A more accurate size of the table would include the hidden system columns deletexid, insertxid, oid (ROW ID), as well. One of my tables was using 752 blocks without including the hidden columns. When i added the hidden columns, it went upto 1063 blocks.
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;
Pratik Khadloya
- 12,509
- 11
- 81
- 106
-
Useful, but the premise of the original question is testing the effect of different encodings on user-columns, not the full table size, so hidden columns not that important. For Redshift, it might be better to query the total table info from `SVV_TABLE_INFO` – Davos Dec 13 '19 at 05:56