HTAP标准版简介
HTAP(Hybrid Transaction and Analytical Process,混合事务和分析处理)是能同时提供OLTP和OLAP的混合关系型数据库。
HTAP采用列式存储引擎,利用SIMD(Single Instrnction Multiple Data)并行计算技术,针对海量数据的分析场景,HTAP实时分析避免了用户单独维护数据抽取同步的链路,节约了大量数据管理成本,提供了简洁高效的数据实时分析能力。
标准版HTAP是基于开源StarRocks进行深度二次开发的版本。
产品架构
HTAP实例部署在弹性云服务器ECS上,存储采用高可靠云存储,提供两种类型:极速型SSD和超高IO。
开启GaussDB(for MySQL)实例Binlog日志,将数据同步到HTAP实例,包括表增删操作和部分表结构变更类操作。数据同步到HTAP实例后,可以通过HTAP实例的读写内网地址访问HTAP实例,进行数据分析。
HTAP标准版实例提供了FE节点和BE节点,其中FE节点是标准版HTAP的前端节点,主要负责管理元数据、管理客户端连接、进行查询规划、查询调度等工作。每个FE节点在内存中存储和维护一份完整的元数据副本,保证FE之间的一致性。BE节点是HTAP的后端节点,负责数据存储和SQL计算。
HTAP标准版实例的FE节点有三种角色。
- fe-leader:负责读写元数据。fe-follower节点和fe-observer节点只能读取元数据,并将元数据写请求路由到fe-leader节点。fe-leader节点更新元数据,然后将元数据的更改同步到fe-follower节点和fe-observer节点。
- fe-follower:只能读取元数据。
- fe-observer:fe-observer节点从fe-leader节点同步和重放日志以更新元数据。fe-observer节点主要用于增加集群的查询并发性。
主要特性
计费说明
标准版目前处于公测中,暂不收费。
注意事项
- HTAP标准版目前处于公测中,如需使用,请在管理控制台右上角,选择“工单 > 新建工单”,提交申请。
- 使用HTAP查询数据时,需要注意数据库名、表名、视图名、用户名、角色名大小写敏感,列名和分区名大小写不敏感。
- GaussDB(for MySQL)数据库中的表必须定义主键才支持同步,否则会跳过。
- GaussDB(for MySQL)上执行的DDL,部分不支持同步到HTAP,可能会导致同步失败或数据不一致,使用时需注意。
- 支持同步的DDL
表1 支持同步的DDL相关操作 DDL名称
SQL样例
创建表
CREATE TABLE tbl_name (c_id int not null, c_d_id integer not null, primary key (c_id));
删除表
DROP TABLE tbl_name;
重命名表
RENAME TABLE tbl_name to new_tbl_name;
ALTER TABLE tbl_name RENAME TO new_tbl_name;
清空表数据
TRUNCATE TABLE tbl_name;
修改表注释
ALTER TABLE tbl_name COMMENT='test';
添加列(非主键列)
ALTER TABLE tbl_name ADD c_varchar varchar(2000) AFTER c_tinytext;
删除列(非主键列)
ALTER TABLE tbl_name DROP c_vchar;
修改列类型、列顺序(非主键列)
ALTER TABLE tbl_name CHANGE c_vchar c_vchar varchar(2000) default 'test' AFTER c_tinytext;
注意:不支持修改列名及默认值, DDL语句列名和默认值必须为旧值。
ALTER TABLE tbl_name MODIFY c_vchar varchar(2100) default 'test' AFTER c_tinytext;
注意:不支持修改默认值,DDL语句默认值必须为旧值。
- 不支持同步的DDL
在创建的同步库中,支持同步表及数据,不支持同步数据库,表空间,索引,外键,函数,存储过程,触发器,视图,分区(删除),主键(增加/删除/修改),事务,用户,角色,权限,事件等对象的操作。
不支持同步的索引相关操作请参见表2。
表2 不支持同步的索引相关操作 DDL名称
SQL样例
添加索引
ALTER TABLE tbl_name ADD INDEX name;
重命名索引
ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name;
删除索引
DROP INDEX name ON table;
增加全文索引
CREATE FULLTEXT INDEX name ON table(column);
增加空间索引
ALTER TABLE geom ADD SPATIAL INDEX(g);
修改索引类型
ALTER TABLE tbl_name DROP INDEX i1, ADD INDEX i1(key_part,...) USING BTREE;
添加索引约束
ALTER TABLE tbl_name ADD CONSTRAINT UNIQUE USING BTREE (column);
ALTER TABLE tbl_name ADD CONSTRAINT UNIQUE USING HASH(column);
不支持同步的分区表相关操作请参见表3。
表3 不支持同步的分区表相关操作 DDL名称
SQL样例
分析表分区
ALTER TABLE {db}.tp ANALYZE PARTITION p0;
检查表分区
ALTER TABLE {db}.tp CHECK PARTITION p0;
优化表分区
ALTER TABLE {db}.tp OPTIMIZE PARTITION p0;
重建表分区
ALTER TABLE {db}.tp REBUILD PARTITION p0;
修复表分区
ALTER TABLE {db}.tp REPAIR PARTITION p0;
创建数据库
CREATE DATABASE ddl_test_2;
修改行格式
ALTER TABLE tbl_name ROW_FORMAT = row_format;
设置持久表统计信息
ALTER TABLE tbl_name STATS_PERSISTENT=0, STATS_SAMPLE_PAGES=20,STATS_AUTO_RECALC=1, ALGORITHM=INPLACE, LOCK=NONE;
设置表的字符集
ALTER TABLE tbl_name CHARACTER SET = charset_name;
转换表的字符集
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
优化表
OPTIMIZE TABLE tbl_name;
使用“强制”选项重建表
ALTER TABLE tbl_name FORCE;
执行空重建
ALTER TABLE tbl_name ENGINE=InnoDB;
重命名表空间
ALTER TABLESPACE tablespace_name RENAME TO new_tablespace_name;
增加表分区
ALTER TABLE {db}.tp ADD PARTITION (PARTITION p3 VALUES LESS THAN (2006) );
设置表默认字符集和校对规则
ALTER TABLE tbl_name DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;
建表语句不能包含CHECK,表选项等。
在数据同步过程中,表4中的操作会导致HTAP中数据和GaussDB(for MySQL) 中数据不一致,应避免使用。
这些不支持同步的操作不会影响在HTAP实例上查询和分析数据。
表4 导致数据不一致的DDL操作说明 DDL名称
SQL样例
删除主键
ALTER TABLE tbl_name DROP PRIMARY KEY;
增加主键
ALTER TABLE {db}.t1 ADD PRIMARY KEY (id);
增加删除主键
ALTER TABLE tbl_name DROP PRIMARY KEY, ADD PRIMARY KEY (column);
主键允许为NULL
ALTER TABLE tbl_name MODIFY COLUMN key_column_name data_type;
修改主键类型
ALTER TABLE tbl_name MODIFY COLUMN key_column_name data_type not null;
增加外键
ALTER TABLE tbl1 ADD CONSTRAINT fk_name FOREIGN KEY index (col1)REFERENCES tbl2(col2) referential_actions;
删除外键
ALTER TABLE tbl DROP FOREIGN KEY fk_name;
增加列
说明:支持一般的列增加,但不支持缺省值为如下取值的场景:
- 双引号
- 包含HTAP中不存在的函数,字符串,标识符
ALTER TABLE tbl_name ADD COLUMN column_name column_definition
c VARCHAR(10) DEFAULT (CONCAT('1', '2'));
设置列的缺省值
说明:支持缺省值的设置,但不支持缺省值为如下取值的场景:
- 双引号
- 包含HTAP中不存在的函数,字符串,标识符
ALTER TABLE tbl_name ALTER COLUMN col SET DEFAULT literal;
修改列不允许为NULL
ALTER TABLE tbl_name MODIFY COLUMN column_name data_type NOT NULL;
同时修改列名和类型
ALTER TABLE t1 CHANGE b b1 VARCHAR(100);
修改列名
ALTER TABLE t1 RENAME COLUMN a TO b;
创建无主键的表
ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1)STORED);
增加存储型衍生列
ALTER TABLE {db}.t1 ADD COLUMN (st2 INT GENERATED ALWAYS AS (c2 + 2)STORED), ALGORITHM=COPY;
增加虚拟型衍生列
ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1)VIRTUAL);
删除表分区
ALTER TABLE {db}.tp DROP PARTITION p4;
丢弃表分区
ALTER TABLE {db}.tp DISCARD PARTITION p2 TABLESPACE;
导入表分区
ALTER TABLE {db}.tp IMPORT PARTITION p2 TABLESPACE;
截断表分区
ALTER TABLE {db}.tp TRUNCATE PARTITION p2;
截断分区表
TRUNCATE {db}.tp;
联合表分区
ALTER TABLE {db}.tp_hash COALESCE PARTITION 2;
重新组织表分区
ALTER TABLE {db}.tp REORGANIZE PARTITION p0,p1,p2,p3 INTO ( ... );
交换表分区
ALTER TABLE {db}.tp EXCHANGE PARTITION p0 WITH TABLE {db}.tp2;
删除表分区
ALTER TABLE {db}.tp REMOVE PARTITIONING;
使用REPLACE子句
CREATE OR REPLACE TABLE;
- 支持同步的DDL
- 同步的数据库名称和表名称不支持中文字符。
- 为达到较好性能,可以使用如下方法对查询进行优化。
- 减少无效的计算,去除SQL中不用的字段,避免用SELECT *,简化SQL。
- 去除无用的列,若结果使用到全部列,则相对行存无法达到优化效果。
- 同步的表,默认使用OLAP引擎,主键模型。
- 连接到HTAP标准版实例后,执行如下命令,可以查看从GaussDB(for MySQL)同步到HTAP标准版实例的数据库列表及同步状态。