SNAPSHOT
功能描述
针对多用户情况下,对数据进行统一的版本控制。
注意事项
- 本特性GUC参数db4ai_snapshot_mode,快照存储模型分为MSS和CSS两种;GUC参数db4ai_snapshot_version_delimiter,用于设定版本分隔符,仅接受设定单字节参数值,默认为“@”;GUC参数db4ai_snapshot_version_separator,用于设定子版本分隔符,仅接受设定单字节参数值,默认为“.”。
- 当快照选用增量存储方式时,各个快照中具有依赖关系。删除快照需要按照依赖顺序进行删除。
- snapshot特性用于团队不同成员间维护数据,涉及管理员和普通用户之间的数据转写。所以在三权分立(enableSeparationOfDuty=ON)等状态下,数据库不支持snapshot功能特性。
- 当需要稳定可用的快照用于AI训练等任务时,用户需要将快照发布。
语法格式
- 创建快照
可以采用“CREATE SNAPSHOT … AS”以及“CREATE SNAPSHOT … FROM”语句创建数据表快照。
- CREATE SNAPSHOT AS
CREATE SNAPSHOT <qualified_name> [@ <version | ident | sconst>] [COMMENT IS <sconst>} AS query;
- CREATE SNAPSHOT FROM
CREATE SNAPSHOT <qualified_name> [@ <version | ident | sconst>] FROM @ <version | ident | sconst> [COMMENT IS <sconst>} USING ( { INSERT [INTO SNAPSHOT] … | UPDATE [SNAPSHOT] [AS <alias>] SET … [FROM …] [WHERE …] | DELETE [FROM SNAPSHOT] [AS <alias>] [USING …] [WHERE …] | ALTER [SNAPSHOT] { ADD … | DROP … } [, …] } [; …] );
- CREATE SNAPSHOT AS
- 删除快照。
- 快照采样。
- 快照发布。
- 快照存档。
- 查询快照。
SELECT * FROM DB4AISHOT(<qualified_name> @ <version | ident | sconst>);
参数说明
- qualified_name
创建snapshot的名称。
取值范围:字符串,需要符合标识符命名规范。
- version
(可省略)snapshot的版本号,当省略设置。系统会自动顺延编号。
取值范围:字符串,数字编号配合分隔符。
- comment_item
指定添加的评论内容。
取值范围:字符串,需要符合标识符命名规范。
- insert_item
需要插入的对象名字。
取值范围:字符串,需要符合标识符命名规范。
- alias
对当前对象取的别名。
取值范围:字符串,需要符合标识符命名规范。
- set_item
当前操作的对象名。
取值范围:字符串,需要符合标识符命名规范。
- from_item
用于连接的查询源对象的名称。
取值范围:字符串,需要符合标识符命名规范。
- where_item
返回值为布尔型的任意表达式。
取值范围:字符串,需要符合标识符命名规范。
- using_item
用于连接的对象名称。
取值范围:字符串,需要符合标识符命名规范。
- and_item
需要并列处理的对象名称。
取值范围:字符串,需要符合标识符命名规范。
- drop_item
需要drop的对象名称。
取值范围:字符串,需要符合标识符命名规范。
- attr_list
目标对象的list集合。
取值范围:字符串,需要符合标识符命名规范。
- num
取值范围:数字。
示例
--创建数据表t1。 gaussdb=# CREATE TABLE t1 (id int, name varchar); --插入数据。 gaussdb=# INSERT INTO t1 VALUES (1, 'zhangsan'); gaussdb=# INSERT INTO t1 VALUES (2, 'lisi'); gaussdb=# INSERT INTO t1 VALUES (3, 'wangwu'); gaussdb=# INSERT INTO t1 VALUES (4, 'lisa'); gaussdb=# INSERT INTO t1 VALUES (5, 'jack'); --创建快照。 gaussdb=# CREATE SNAPSHOT s1@1.0 comment is 'first version' AS SELECT * FROM t1; --迭代创建快照。 gaussdb=# CREATE SNAPSHOT s1@2.0 FROM @1.0 comment is 'inherits from @1.0' USING (INSERT VALUES(6, 'john'), (7, 'tim'); DELETE WHERE id = 1); --查看快照内容。 gaussdb=# SELECT * FROM DB4AISHOT(s1@1.0); id | name ----+---------- 1 | zhangsan 2 | lisi 3 | wangwu 4 | lisa 5 | jack (5 rows) gaussdb=# SELECT * FROM DB4AISHOT(s1@2.0); id | name ----+-------- 2 | lisi 3 | wangwu 4 | lisa 5 | jack 6 | john 7 | tim (6 rows) --快照采样。 gaussdb=# SAMPLE SNAPSHOT s1@2.0 stratify by name as nick at ratio .5; --删除快照。 gaussdb=# PURGE SNAPSHOT s1@2.0; gaussdb=# PURGE SNAPSHOT s1nick@2.0; gaussdb=# PURGE SNAPSHOT s1@1.0; --删除表格t1。 gaussdb=# DROP TABLE t1;