使用 CTAS 命令后 Netezza 表大小增加

Posted

技术标签:

【中文标题】使用 CTAS 命令后 Netezza 表大小增加【英文标题】:Netezza table size increased after using CTAS command 【发布时间】:2016-12-03 10:14:20 【问题描述】:

我在 Netezza 中有一个大表,表大小约为 600 GB。 当我尝试从现有表创建新表时,表大小增加了。新表大小为 617 GB。

我用来创建新表的 SQL: create table new_table_name as select * from old_table_name distribution on (column_name); 生成关于 new_table_name 的统计信息; 但是新表和旧表的行数相同。

增加表大小的原因可能是什么?

提前致谢。

【问题讨论】:

old_table_name的分布是否也在column_name上? 没有。在旧表中,我们没有任何分配键。 而当您说“表大小”时,您是指已用空间还是已分配空间? 旧表 - 已用 MB 612606 和总 MB 614126;新表 - 已用 MB 635627 和总 MB 636985。 【参考方案1】:

表的“大小”有两个相关度量:分配大小和使用大小(均以字节为单位) _v_table_storage_stat 将帮助您查看给定表的两种大小

对于小表,分配的大小可以比使用的大小大很多倍,假设行分布均匀,每个数据片至少分配 3MB。我的大部分工作都是在具有 480 个数据切片的双机架 MAKO 系统上完成的。因此,任何小于 14.4GB 的表都或多或少与“大小”的优化无关

不过,我将尝试解释您所看到的: 你必须意识到 1) Netezza 中的所有数据都经过压缩。 2) 正在对每个单独数据片上的“块”数据进行压缩。 3)如果每个块中的数据与可想象的最“混合”情况相比具有许多相似性,则压缩比(压缩后的数据大小除以之前的大小)会变得更好(更小)。 4)“分发”和“组织”都可以影响这一点。向表中添加数据时使用的 select 语句中的“order by”甚至“group by”也可以这样做

在我的系统中,我有一个非常宽的表格,每天有几个“副本”我们客户的银行账户。每个副本都与前一个副本 99% 相同,只有“平衡”之类的变化。

通过在 accountID 上分发并在 AccountID、Timestamp 上进行组织 - 我看到大小减小了 10-15%。一些数据切片效果更好,因为它们包含大量的“系统”帐户 ID,这些 ID 在数据中具有不同的模式。

简而言之: A) 这是完全自然的 B)不要太担心,因为: C) Netezza 系统上的“大”表与内存太少且磁盘速度慢的 4 核数据库上的表不同:)

【讨论】:

以上是关于使用 CTAS 命令后 Netezza 表大小增加的主要内容,如果未能解决你的问题,请参考以下文章

CTAS COPY INTO 的输出

Netezza 将 csv 作为空表导入

sql [sql] CTAS - 当您要创建临时表以执行进一步查询时使用。

netezza 中的表名别名

在 Netezza Aginity 中显示创建表

Netezza:更新错误:此类命令不支持跨数据库连接