更新时间:2026-07-28 GMT+08:00
其他DDL
TRUNCATE
TRUNCATE表时会清除行存数据,同时级联处理加载的IMCV列存数据,不删除IMCV元信息。
TRUNCATE分区时会清除行存表分区数据,同时级联处理该分区的IMCV列存数据,不删除IMCV元信息。
示例:
htapdb=# CREATE TABLE htap_test(
id int,
dept_id int,
salary int,
name varchar(20),
comments varchar(30)) WITH (storage_type = ustore) DISTRIBUTE BY HASH(id);
CREATE TABLE
htapdb=# INSERT INTO htap_test VALUES (generate_series(1,30), 1, 8000, 'Alice', 'for test');
INSERT 0 30
htapdb=# ALTER TABLE htap_test COLVIEW;
ALTER TABLE
htapdb=# SELECT count(*) FROM htap_test;
count
-------
30
(1 row)
htapdb=# SELECT node_name, rel_name, partition_name, imcvnattr, imcvkey, rowgroup_num, cu_num_in_mem, cu_mem_size, cu_num_in_disk, cu_disk_size FROM gs_global_imcv_info() ORDER BY node_name,rel_name;
node_name | rel_name | partition_name | imcvnattr | imcvkey | rowgroup_num | cu_num_in_mem | cu_mem_size | cu_num_in_disk | cu_disk_size
--------------+-----------+----------------+-----------+-----------+--------------+---------------+-------------+----------------+--------------
dn_6001_6002 | htap_test | | 5 | 1 2 3 4 5 | 1 | 6 | 8099 | 0 | 0
dn_6003_6004 | htap_test | | 5 | 1 2 3 4 5 | 1 | 6 | 8099 | 0 | 0
(2 rows)
htapdb=# TRUNCATE TABLE htap_test;
TRUNCATE TABLE
htapdb=# SELECT count(*) FROM htap_test;
count
-------
0
(1 row)
--TRUNCATE不删除IMCV元信息,从系统函数gs_global_imcv_info()中仍能查询到记录。
htapdb=# SELECT node_name, rel_name, partition_name, imcvnattr, imcvkey, rowgroup_num, cu_num_in_mem, cu_mem_size, cu_num_in_disk, cu_disk_size FROM gs_global_imcv_info() ORDER BY node_name,rel_name;
node_name | rel_name | partition_name | imcvnattr | imcvkey | rowgroup_num | cu_num_in_mem | cu_mem_size | cu_num_in_disk | cu_disk_size
--------------+-----------+----------------+-----------+-----------+--------------+---------------+-------------+----------------+--------------
dn_6001_6002 | htap_test | | 5 | 1 2 3 4 5 | 0 | 0 | 0 | 0 | 0
dn_6003_6004 | htap_test | | 5 | 1 2 3 4 5 | 0 | 0 | 0 | 0 | 0
(2 rows)
htapdb=# DROP TABLE htap_test;
DROP TABLE DROP
DROP表时会删除行存表数据,同时级联删除该表的所有IMCV列存数据,以及对应的IMCV元信息。
DROP分区时会删除行存表的对应分区数据,同时级联删除该分区的IMCV列存数据,以及对应的IMCV元信息。
示例:
htapdb=# CREATE TABLE htap_test(
id int,
dept_id int,
salary int,
name varchar(20),
comments varchar(30)) with (storage_type = ustore) DISTRIBUTE BY HASH(id);
CREATE TABLE
htapdb=# INSERT INTO htap_test VALUES (generate_series(1,30), 1, 8000, 'Alice', 'for test');
INSERT 0 30
htapdb=# ALTER TABLE htap_test COLVIEW;
ALTER TABLE
htapdb=# SELECT count(*) FROM htap_test;
count
-------
30
(1 row)
htapdb=# SELECT node_name, rel_name, partition_name, imcvnattr, imcvkey, rowgroup_num, cu_num_in_mem, cu_mem_size, cu_num_in_disk, cu_disk_size FROM gs_global_imcv_info() ORDER BY node_name,rel_name;
node_name | rel_name | partition_name | imcvnattr | imcvkey | rowgroup_num | cu_num_in_mem | cu_mem_size | cu_num_in_disk | cu_disk_size
--------------+-----------+----------------+-----------+-----------+--------------+---------------+-------------+----------------+--------------
dn_6001_6002 | htap_test | | 5 | 1 2 3 4 5 | 0 | 0 | 0 | 0 | 0
dn_6003_6004 | htap_test | | 5 | 1 2 3 4 5 | 0 | 0 | 0 | 0 | 0
(2 rows)
htapdb=# DROP TABLE htap_test;
DROP TABLE
htapdb=# SELECT node_name, rel_name, partition_name, imcvnattr, imcvkey, rowgroup_num, cu_num_in_mem, cu_mem_size, cu_num_in_disk, cu_disk_size FROM gs_global_imcv_info() ORDER BY node_name,rel_name;
node_name | rel_name | partition_name | imcvnattr | imcvkey | rowgroup_num | cu_num_in_mem | cu_mem_size | cu_num_in_disk | cu_disk_size
-----------+----------+----------------+-----------+---------+--------------+---------------+-------------+----------------+--------------
(0 rows)
htapdb=# DROP TABLE htap_test;
DROP TABLE VACUUM FULL
VACUUM FULL会在对行存表进行处理的同时级联处理列存数据。
对于HTAP列存数据的处理包含两个阶段:
- 删除原有的IMCV信息。
- 重建IMCV,通过重新加载实现IMCV列存数据内存紧凑。
示例:
htapdb=# CREATE TABLE htap_test(
id int,
dept_id int,
salary int,
name varchar(20),
comments varchar(30)) WITH (storage_type = ustore) DISTRIBUTE BY HASH(id);
CREATE TABLE
htapdb=# INSERT INTO htap_test VALUES (generate_series(1,30), 1, 8000, 'Alice', 'for test');
INSERT 0 30
htapdb=# ALTER TABLE htap_test COLVIEW;
ALTER TABLE
htapdb=# SELECT node_name, rel_name, partition_name, imcvnattr, imcvkey, rowgroup_num, cu_num_in_mem, cu_mem_size, cu_num_in_disk, cu_disk_size FROM gs_global_imcv_info() ORDER BY node_name,rel_name;
node_name | rel_name | partition_name | imcvnattr | imcvkey | rowgroup_num | cu_num_in_mem | cu_mem_size | cu_num_in_disk | cu_disk_size
--------------+-----------+----------------+-----------+-----------+--------------+---------------+-------------+----------------+--------------
dn_6001_6002 | htap_test | | 5 | 1 2 3 4 5 | 1 | 6 | 8099 | 0 | 0
dn_6003_6004 | htap_test | | 5 | 1 2 3 4 5 | 1 | 6 | 8099 | 0 | 0
(2 rows)
htapdb=# DELETE FROM htap_test WHERE id<10;
DELETE 9
htapdb=# VACUUM FULL htap_test;
VACUUM
htapdb=# SELECT node_name, rel_name, partition_name, imcvnattr, imcvkey, rowgroup_num, cu_num_in_mem, cu_mem_size, cu_num_in_disk, cu_disk_size FROM gs_global_imcv_info() ORDER BY node_name,rel_name;
node_name | rel_name | partition_name | imcvnattr | imcvkey | rowgroup_num | cu_num_in_mem | cu_mem_size | cu_num_in_disk | cu_disk_size
--------------+-----------+----------------+-----------+-----------+--------------+---------------+-------------+----------------+--------------
dn_6001_6002 | htap_test | | 5 | 1 2 3 4 5 | 1 | 6 | 8087 | 0 | 0
dn_6003_6004 | htap_test | | 5 | 1 2 3 4 5 | 1 | 6 | 8093 | 0 | 0
(2 rows)
htapdb=# DROP TABLE htap_test;
DROP TABLE 父主题: DDL