如何找出 Redshift table 中每一列的大小?
How can I find out the size of each column in a Redshift table?
在 Redshift 中尝试不同的压缩设置时,了解每列的大小将非常有用。我知道如何获取 table 的大小,但我想知道 table.
中每个单独列的大小
此查询将为您提供每列的大小 (MB)。它的作用是计算数据块的数量,其中每个块使用 1 MB,按 table 和列分组。
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
您可以在此处阅读有关查询中涉及的两个 table 的更多信息:
SVV_DISKUSAGE&
pg_attribute.
更准确的 table 大小还包括隐藏的系统列 deletexid
、insertxid
、oid
(ROW ID)。我的 table 之一使用了 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;
在 Redshift 中尝试不同的压缩设置时,了解每列的大小将非常有用。我知道如何获取 table 的大小,但我想知道 table.
中每个单独列的大小此查询将为您提供每列的大小 (MB)。它的作用是计算数据块的数量,其中每个块使用 1 MB,按 table 和列分组。
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
您可以在此处阅读有关查询中涉及的两个 table 的更多信息: SVV_DISKUSAGE& pg_attribute.
更准确的 table 大小还包括隐藏的系统列 deletexid
、insertxid
、oid
(ROW ID)。我的 table 之一使用了 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;