使用 UNIX SAS 找出 Netezza 表的大小

Posted

技术标签:

【中文标题】使用 UNIX SAS 找出 Netezza 表的大小【英文标题】:Finding out the size of a Netezza table using UNIX SAS 【发布时间】:2011-01-20 11:33:08 【问题描述】:

可以使用哪些语法/表来确定 Netezza 表的大小 (Gbs)?我通过 UNIX SAS(ODBC 或 libname 引擎)访问。我假设有一个视图可以提供此信息?

【问题讨论】:

【参考方案1】:

所以您对两个系统视图_v_obj_relation_xdb 和_v_sys_object_dslice_info 感兴趣。第一个 (_v_obj_relation_xdb) 包含表信息(名称、类型等),第二个 (_v_sys_object_dslice_info) 包含每个磁盘的大小信息。您可能想看看这两个表,以了解您真正追求的是什么,但简单的查询是:

select objname, sum(used_bytes) size_in_bytes
from _V_OBJ_RELATION_XDB 
join _V_SYS_OBJECT_DSLICE_INFO on (objid = tblid) 
where objname = 'UPPERCASE_TABLE_NAME'
group by objname

这将返回表的大小(以字节为单位),我将把转换为 GB 作为练习留给读者。那里还有一些其他有趣的领域,因此您可能想查看这些视图。

【讨论】:

【参考方案2】:

您也可以使用 (_v_sys_object_storage_size )

   select   b.objid
            ,b.database as db
            ,lower(b.objname) as tbl_nm
            ,lower(b.owner) as owner
            ,b.objtype
            ,d.used_bytes/pow(1024,3) as used_gb
            ,d.skew
            ,cast(b.createdate as timestamp) as createdate_ts
            ,cast(b.objmodified as timestamp) as objmodified_ts

     from _v_obj_relation_xdb b inner join
          _v_sys_object_storage_size d
          on    b.objid=d.tblid
          and lower(b.objname) = 'table name'

【讨论】:

【参考方案3】:

磁盘大小 (used_bytes) 表示压缩数据,包括表中所有已删除行的存储空间。

表行数统计(reltuples)一般是很准确的,但它只是一个统计,不能保证匹配“select count(*)”表行数。

您可以通过目录查询获取此信息

select tablename, reltuples, used_bytes from _v_table_only_storage_stat where tablename = ^FOOBAR^;

【讨论】:

以上是关于使用 UNIX SAS 找出 Netezza 表的大小的主要内容,如果未能解决你的问题,请参考以下文章

从 Netezza 数据库创建 SAS 数据集时,SAS“CLI 游标扩展提取错误:数值超出范围”

Netezza 中的“intck”SAS 类似物

SAS:想知道如何将 WORK.WHATEVER 表中的数据传递到 Netezza 表中

从 SAS 调用 Netezza 存储过程

Hive表和Netezza表的匹配记录

sasgrid平台sas程序执行慢