更新时间:2024-11-12 GMT+08:00
分享

SNAPSHOT

功能描述

针对多用户情况下,对数据进行统一的版本控制。

注意事项

  • 本特性GUC参数db4ai_snapshot_mode,快照存储模型分为MSS和CSS两种;GUC参数db4ai_snapshot_version_delimiter,用于设定版本分隔符,仅接受设定单字节参数值,默认为“@”;GUC参数db4ai_snapshot_version_separator,用于设定子版本分隔符,仅接受设定单字节参数值,默认为“.”。
  • 当快照选用增量存储方式时,各个快照中具有依赖关系。删除快照需要按照依赖顺序进行删除。
  • snapshot特性用于团队不同成员间维护数据,涉及管理员和普通用户之间的数据转写。所以在三权分立(enableSeparationOfDuty=ON)等状态下,数据库不支持snapshot功能特性。
  • 当需要稳定可用的快照用于AI训练等任务时,用户需要将快照发布。

语法格式

  1. 创建快照

    可以采用“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 … } [, …]
            } [; …]
          );
  2. 删除快照。
    PURGE SNAPSHOT
    PURGE SNAPSHOT <qualified_name> @ <version | ident | sconst>;
  3. 快照采样。
    SAMPLE SNAPSHOT
    SAMPLE SNAPSHOT <qualified_name> @ <version | ident | sconst>
        [STRATIFY BY attr_list]
        { AS <label> AT RATIO <num> [COMMENT IS <comment>] } [, …]
  4. 快照发布。
    PUBLISH SNAPSHOT
    PUBLISH SNAPSHOT <qualified_name> @ <version | ident | sconst>;
  5. 快照存档。
    ARCHIVE SNAPSHOT
    ARCHIVE SNAPSHOT <qualified_name> @ <version | ident | sconst>;
  6. 查询快照。
    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;

相关文档