修整表

高度标准化的数据库设计通常使用星形或雪花架构模型,包含多个大型事实表和多个较小的维度表。查询通常涉及大型事实表和多个维度表之间的联接。根据联接的表数和数据量,这些查询可能会产生大量开销。

为避免此问题,一些用户创建了对查询所需的所有事实表和维度表列进行组合的宽表。这些表可以显著加快查询执行速度。但是,维护冗余的标准化和非标准化数据集有其自身的管理成本。

非标准化或修整表可以最大限度地减少这些问题。修整表可以包含通过查询其他表来获取其值的列。对源表和修整表的操作是解耦的;一个表的更改不会自动传播到另一个表。这最大限度地减少了非标准化表的典型开销。

修整表使用以下一个或两个列约束子句来定义派生列:

  • 使用 `CREATE TABLE` 或 `ALTER TABLE...ADD COLUMN` 创建列时,DEFAULT query-expression 设置列值。

  • 调用函数 REFRESH_COLUMNS 时,SET USING query-expression 设置列值。

在这两种情况下,query-expression 必须只返回一个行和列值,或者不返回。如果查询未返回任何行,则列值设置为 NULL。

与 Vertica 中定义的其他表一样,您可以随时在修整表中添加和移除 DEFAULT 和 SET USING 列。Vertica 强制实施修整表与其查询的表之间的依赖关系。有关详细信息,请参阅修改 SET USING 和 DEFAULT 列