创建投影

Vertica 支持两种投影创建方法:Database Designer 和 CREATE PROJECTION 语句。

使用 Database Designer 创建投影

Vertica 建议使用 Database Designer 设计物理架构,方法是在具有代表性的数据示例上运行它。Database Designer 生成用于创建投影的 SQL,如下所示:

  1. 分析 逻辑架构、示例数据和示例查询(可选)。

  2. 以 SQL 脚本的形式设计可自动或手动部署的 物理架构

有关详细信息,请参阅创建数据库设计

手动创建投影

CREATE PROJECTION 定义一个投影,如以下示例所示:

=> CREATE PROJECTION retail_sales_fact_p (
    store_key ENCODING RLE,
       pos_transaction_number ENCODING RLE,
    sales_dollar_amount,
    cost_dollar_amount )
AS SELECT
    store_key,
    pos_transaction_number,
    sales_dollar_amount,
    cost_dollar_amount
FROM store.store_sales_fact
ORDER BY store_key
SEGMENTED BY HASH(pos_transaction_number) ALL NODES;

投影定义包括以下组成部分:

列列表和编码

SQL 语句的这一部分列出投影中的每一列,并定义每一列的编码。Vertica 支持编码数据,这有助于查询执行产生较少的磁盘 I/O。

CREATE PROJECTION retail_sales_fact_P (
    store_key ENCODING RLE,
    pos_transaction_number ENCODING RLE,
    sales_dollar_amount,
       cost_dollar_amount )

基本查询

投影的基本查询子句确定要包含在投影中的列。


AS SELECT
    store_key,
    pos_transaction_number,
    sales_dollar_amount,
    cost_dollar_amount

排序顺序

投影的 ORDER BY 子句确定如何对投影数据进行排序。排序顺序可确定按照逻辑分组的值的位置,以便磁盘读取可以一次识别许多结果。为了获得最佳性能,请勿按 LONG VARBINARY 和 LONG VARCHAR 列对投影进行排序。有关详细信息,请参阅ORDER BY 子句

ORDER BY store_key

分段

投影的分段子句指定如何在数据库中的所有节点之间分布投影数据。均匀分布负载有助于最大限度地访问投影数据。对于大型表,使用 SEGMENTED BY HASH 按分段分布投影数据。例如:

SEGMENTED BY HASH(pos_transaction_number) ALL NODES;

对于小型表,使用 UNSEGMENTED 关键字复制表数据。Vertica 会在所有群集节点上创建未分段投影的相同副本。复制可确保较高的可用性和恢复能力。

为了获得最大性能,请勿按 LONG VARBINARY 和 LONG VARCHAR 列对投影进行分段。

有关设计注意事项的详细信息,请参阅创建自定义设计