创建投影
Vertica 支持两种投影创建方法:Database Designer 和 CREATE PROJECTION 语句。
使用 Database Designer 创建投影
Vertica 建议使用 Database Designer 设计物理架构,方法是在具有代表性的数据示例上运行它。Database Designer 生成用于创建投影的 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 列对投影进行分段。
有关设计注意事项的详细信息,请参阅创建自定义设计。