支持与限制
实时数仓兼容所有列存语法,具体情况如下:
| 语法 | 是否支持 |
|---|---|
| CREATE TABLE | 支持 |
| CREATE TABLE LIKE | 支持 |
| DROP TABLE | 支持 |
| INSERT | 支持 |
| COPY | 支持 |
| SELECT | 支持 |
| TRUNCATE | 支持 |
| EXPLAIN | 支持 |
| ANALYZE | 支持 |
| VACUUM | 支持 |
| ALTER TABLE DROP PARTITION | 支持 |
| ALTER TABLE ADD PARTITION | 支持 |
| ALTER TABLE SET WITH OPTION | 支持 |
| ALTER TABLE DROP COLUMN | 支持 |
| ALTER TABLE ADD COLUMN | 支持 |
| ALTER TABLE ADD NODELIST | 支持 |
| ALTER TABLE CHANGE OWNER | 支持 |
| ALTER TABLE RENAME COLUMN | 支持 |
| ALTER TABLE TRUNCATE PARTITION | 支持 |
| CREATE INDEX | 支持 |
| DROP INDEX | 支持 |
| DELETE | 支持 |
| ALTER TABLE 其他 | 支持 |
| ALTER INDEX | 支持 |
| MERGE | 支持 |
| SELECT INTO | 支持 |
| UPDATE | 支持 |
| CREATE TABLE AS | 支持 |
约束限制
- 当需要使用HStore表时,需要同步修改以下几个参数的默认值,否则会导致HStore表性能严重劣化。
9.1.1.100集群版本开始推荐的参数修改配置是:autovacuum_max_workers_hstore=3,autovacuum_max_workers=2,autovacuum_max_workers_col=2,autovacuum=true。
- 8.2.1及以上版本支持列存btree索引脏数据清理,频繁更新入库的场景下能有效控制索引空间,提高入库与查询性能。实时场景不应该对列存使用psort索引原因如下:
- psort没有索引清理,索引空间会持续膨胀。
- psort只对攒批入库的数据进行排序,实时场景性能提升有限。
- 9.1.1.100集群版本hstore表脏页清理依赖列存vacuum和异步排序两个机制协同工作,默认小于1000行的CU被定性为小CU。脏页中小CU会通过异步排序的机制完成合并,非小CU通过列存vacuum重写到新的文件。列存vacuum受阈值参数colvacuum_threshold_scale_factor(该参数需联系技术支持修改)控制。
- 当使用HStore异步排序功能时,异步排序期间可能会阻塞部分数据的DML操作,最大的阻塞粒度为异步排序的行数阈值,因此在反复DML的场景下不建议使用此功能。
列存表的Delta表差异
| 数仓类型 | 列存的delta表 | HStore的delta表 | HStore Opt的delta表 |
|---|---|---|---|
| 表结构 | 与列存主表的表定义一致。 | 与主表定义不一致。 | 不同于主表,与HStore表相同。 |
| 功能 | 用于暂存小批量insert的数据,满阈值后再merge到主表,避免直接insert到主表产生大量小CU。 | 用于持久化存储update/delete/insert信息。在产生故障后用于恢复内存更新链等管理并发更新的内存结构。 | 用于持久化存储update/delete/insert信息。在产生故障后用于恢复内存更新链等管理并发更新的内存结构。相比HStore进一步优化。 |
| 缺陷 | 来不及merge导致delta表膨胀,影响查询性能,同时无法解决并发update的锁冲突问题 | 依赖后台常驻autovacuum来做merge操作。 | 依赖后台常驻autovacuum来做merge操作。 |
| 规格差异 | 不支持同一CU的并发,适合并发更新较少的情况。 |
|
|
| 入库建议 |
| ||
| 点查建议 |
| ||