【问题标题】:How can I find out the size of each column in a Redshift table?如何找出 Redshift 表中每一列的大小?
【发布时间】:2015-10-28 10:28:54
【问题描述】:

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

【问题讨论】:

    标签: sql amazon-redshift


    【解决方案1】:

    此查询将为您提供每列的大小 (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.

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 有用,但原问题的前提是测试不同编码对用户列的影响,而不是完整的表大小,所以隐藏列并不那么重要。对于 Redshift,最好从SVV_TABLE_INFO查询总表信息
      猜你喜欢
      • 2014-03-13
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多