如何在Redshift表中找出每列的大小?

时间:2015-10-28 10:28:54

标签: sql amazon-redshift

在Redshift中尝试不同的压缩设置时,了解每列的大小非常有用。我知道如何获得表的大小,但我想知道该表中每个列的大小。

2 个答案:

答案 0 :(得分:8)

此查询将为您提供每列的大小(MB)。它的作用是计算数据块的数量,每个块使用1 MB,按表和列分组。

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

答案 1 :(得分:1)

表格的更准确尺寸还包括隐藏的系统列deletexidinsertxidoid(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;