更新时间: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列存数据的处理包含两个阶段:

  1. 删除原有的IMCV信息。
  2. 重建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

相关文档