本文主要介绍使用 HTAP 功能常用的 SQL 语句。
目前支持开启 HTAP 能力的表必须包含主键(Primary Key),且仅支持对整表创建列存。
对 HTAP 做 DDL 变更时,需要执行 SECONDARY_UNLOAD
卸载列存后,再执行 DDL 变更。执行 DDL 完成后,再执行 SECONDARY_LOAD
加载列存。
说明
创建 HTAP 表时,需要通过读写终端(如主节点终端或默认终端)进行连接, 且账号需要拥有 CREATE 权限。
veDB MySQL 通过指定 SECONDARY_ENGINE = HTAP
为目标表开启 HTAP 功能。同时通过 SECONDARY_ENGINE_ATTRIBUTE = 'JSON string'
方式定义 HTAP 表的 AP 属性,比如分区列、分区数目等。示例如下:
创建新一个表。
CREATE TABLE table_name (...) SECONDARY_ENGINE=HTAP SECONDARY_ENGINE_ATTRIBUTE='JSON string' ;
通过 ALTER TABLE 为存量 TP 表附上 HTAP 属性。
ALTER TABLE table_name SECONDARY_ENGINE=HTAP SECONDARY_ENGINE_ATTRIBUTE='JSON string' ;
SECONDARY_ENGINE_ATTRIBUTE
中的属性均为选填,包括表属性和列字段属性:
类型 | 说明 |
---|---|
表属性 | 当前,支持的 HTAP 表属性如下:
|
列字段属性 | 支持的 HTAP 列字段属性如下:
|
说明
加载或卸载 HTAP 表,需要通过读写终端(如主节点终端或默认终端)进行连接,且账号需要拥有目标表的 DDL 权限。
对于已经指定 SECONDARY_ENGINE
为 HTAP 的表,通过如下方式进行表加载:
ALTER TABLE table_name SECONDARY_LOAD;
加载后,该表自动捕获 TP 数据变更,同时保持 TP 和 AP 的数据一致性。
也可通过如下语法,卸载 HTAP 表,此时该表只会保留一份 TP 数据:
ALTER TABLE table_name SECONDARY_UNLOAD;
说明
执行分析查询语句,需要使用 HTAP 集群终端进行连接。
目前,veDB MySQL HTAP 版本,查询语法完全兼容 MySQL,可以通过设置 use_secondary_engine
变量让请求强制走 AP 或者 TP,使用方式如下:
该变量可以为会话变量,通过 SET @@use_secondary_engine
指定。取值如下:
ON
:内核自动分流。
OFF
:强制走TP。
FORCED
:强制走 AP。
该变量可以为 HINT 变量,通过语句指定。
-- 开启自动TP/AP 分流, SESSION有效 SET @@use_secondry_engine="ON"; -- 强制走AP引擎 SET @@use_secondary_engine="FORCED"; -- 强制走TP引擎 SET @@use_secondary_engine="OFF"; -- 查询采用Hint指定 SELECT /*+ set_var(use_secondary_engine=forced) */ CHAR(N_NATIONKEY) FROM NATION;
说明
执行分析查询语句,需要使用 HTAP 集群终端进行连接。
当 use_secondary_engine = ON
的时候,内核开启自动分流,TP 和 AP 的自动分流采用三个维度:
基于查询 Cost 的分流 ,通过 secondary_engine_cost_threshold
进行变量控制。
-- 查询当前的分流Cost阈值 SELECT @@secondary_engine_cost_threshold; -- 设置语句级别的Cost阈值 SELECT /*+ set_var(secondary_engine_cost_threshold=100) */ CHAR(N_NATIONKEY) FROM NATION;
基于数据新鲜度的分流,即该查询会尝试等待一定时间后,检查 AP 的列存数据生成是否已经达到 TP 的数据位点;若追上了 TP 数据,则将查询分发到 AP,通过 htap_consistency_read_timeout
进行控制。
-- 查询数据新鲜度的等待时延(millisecond) SELECT @@htap_consistency_read_timeout; -- 设置数据新鲜度的等待时延(millisecond) SET GLOBAL htap_consistency_read_timeout = 5000; -- 设置语句级别的会话一致性等待时间 SELECT /*+ set_var(htap_consistency_read_timeout=500) */ CHAR(N_NATIONKEY) FROM NATION;
基于 AP 兼容性的分流
目前,HTAP 对已支持的 MySQL 数据类型、函数进行分发,确保整系统的查询结果一致。