当数据加载到 HeatWave 中时,它默认按表的主键分区并水平切片以在 HeatWave 节点之间分布。数据放置键功能允许按JOIN
或
键列对数据进行分区,这可以
通过避免在查询执行时在 HeatWave 节点之间重新分配数据相关的成本
GROUP BY
来提高JOIN
或查询性能。GROUP BY
通常,只有在按主键分区不能提供足够性能时才使用数据放置键。此外,为最耗时的查询保留数据放置键。在这种情况下,在最常用JOIN
的键和运行时间最长的查询的键上定义数据放置键。
对于数据放置键建议,请在将表加载到 HeatWave 并运行查询后使用 Advisor 实用程序。有关详细信息,请参阅 第 2.7.3 节“使用 Advisor 优化工作负载”。
定义数据放置键需要添加带有数据放置关键字字符串的列注释:
RAPID_COLUMN=DATA_PLACEMENT_KEY=N
其中N
是一个索引值,它定义了数据放置键的优先顺序。
索引必须从 1 开始。
允许的索引值范围从 1 到 16(含)。
一个索引值不能在同一个表中重复。例如,您不能将索引值 2 分配给同一表中的多个列。
不允许索引值出现差距。例如,如果您定义一个索引值为 3 的数据放置键列,则还必须有另外两个索引值分别为 1 和 2 的数据放置键列。
CREATE TABLE
您可以在or
ALTER TABLE
语句
中定义数据放置关键字字符串
:
CREATE TABLE orders (date DATE COMMENT 'RAPID_COLUMN=DATA_PLACEMENT_KEY=1');
ALTER TABLE orders MODIFY date DATE COMMENT 'RAPID_COLUMN=DATA_PLACEMENT_KEY=1';
以下示例显示了定义为数据放置键的多个列。虽然定义了主键,但数据由数据放置键分区,数据放置键优先于主键。
CREATE TABLE orders (
id INT PRIMARY KEY,
date DATE COMMENT 'RAPID_COLUMN=DATA_PLACEMENT_KEY=1',
price FLOAT COMMENT 'RAPID_COLUMN=DATA_PLACEMENT_KEY=2'
);
将多个列定义为数据放置键时,根据查询成本对键进行优先级排序。例如,分配DATA_PLACEMENT_KEY=1
给成本最高的查询
DATA_PLACEMENT_KEY=2
的键,以及下一个成本最高的查询的键,等等。
列注释中允许包含其他信息。例如,允许在数据放置关键字字符串旁边指定列描述:
COMMENT 'column_description RAPID_COLUMN=DATA_PLACEMENT_KEY=1'
要修改或删除数据放置键,请参阅 第 2.4 节“修改表”中描述的过程。
使用说明:
JOIN
和GROUP BY
查询优化仅在至少一个JOIN
或GROUP BY
关系具有与定义的数据放置键匹配的键时应用。如果一个
JOIN
操作可以在有或没有查询优化的情况下执行JOIN
,GROUP BY
编译时成本模型将决定查询的执行方式。成本模型使用估计的统计数据。不能在字典编码的字符串列上定义数据放置键,但允许在可变长度编码的列上定义。默认情况下,HeatWave 将可变长度编码应用于字符串列。请参阅 第 2.7.1 节,“编码字符串列”。
只能在具有受支持数据类型的列上定义数据放置键。请参阅 第 2.9 节,“支持的数据类型”。
不能将数据放置键列定义为
NOT SECONDARY
列。请参阅 排除表列。有关相关的元数据查询,请参阅 第 2.14 节,“元数据查询”。