Skip to content

Commit 17bd2a4

Browse files
zhyassclaude
andauthored
docs: add snapshot tag and table versioning documentation (#3133)
* add table snapshot tag * fix * docs: reorganize snapshot tag sections and add note for tag distinction - Move Snapshot Tag Operations before Swap Tables in ALTER TABLE docs - Replace comparison table with a concise note distinguishing snapshot tags from governance tags - Add EEFeature badge to table versioning pages - Move table versioning guide under data-lifecycle directory Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix * docs: add explicit anchor IDs for snapshot-tags headings Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent be2d66c commit 17bd2a4

File tree

16 files changed

+443
-5
lines changed

16 files changed

+443
-5
lines changed

docs/cn/guides/57-data-management/01-data-lifecycle.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Databend 支持创建和修改以下对象:
2525
- 授权
2626
- 计算集群
2727
- 任务
28+
- [快照标签](/sql/sql-commands/ddl/table-versioning#snapshot-tags)
2829

2930
## 组织数据
3031

docs/cn/sql-reference/10-sql-commands/00-ddl/01-table/90-alter-table.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,20 @@ CREATE CONNECTION s3_role_conn
257257
ALTER TABLE sales_data CONNECTION=( connection_name = 's3_role_conn' );
258258
```
259259

260+
## 快照标签操作 {#snapshot-tag-operations}
261+
262+
<FunctionDescription description="Introduced or updated: v1.2.891"/>
263+
264+
创建或删除引用特定 FUSE 表快照的命名快照标签。快照标签允许您为表的某个时间点状态创建书签,以便稍后通过 [AT](../../20-query-syntax/03-query-at.md) 子句进行查询。
265+
266+
完整语法和示例请参阅:
267+
- [CREATE SNAPSHOT TAG](../21-table-versioning/01-create-snapshot-tag.md)
268+
- [DROP SNAPSHOT TAG](../21-table-versioning/02-drop-snapshot-tag.md)
269+
270+
:::note
271+
快照标签与[治理标签](#tag-operations)不同。快照标签为表快照创建书签用于时间回溯,而治理标签为对象附加键值元数据用于分类。
272+
:::
273+
260274
## 交换表 {#swap-tables}
261275

262276
在同一个事务中交换两张表的所有元数据和数据,使双方的列、约束以及数据完全互换。
@@ -298,7 +312,7 @@ DESC t2;
298312

299313
## Tag 操作 {#tag-operations}
300314

301-
为表分配或移除 Tag。Tag 必须先通过 [CREATE TAG](../08-tag/01-ddl-create-tag.md) 创建。完整说明请参阅 [SET TAG / UNSET TAG](../08-tag/04-ddl-set-tag.md)
315+
为表分配或移除治理标签。治理标签是用于分类和数据治理的键值元数据。Tag 必须先通过 [CREATE TAG](../08-tag/01-ddl-create-tag.md) 创建。完整说明请参阅 [SET TAG / UNSET TAG](../08-tag/04-ddl-set-tag.md)
302316

303317
### 语法
304318

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
---
2+
title: CREATE SNAPSHOT TAG
3+
sidebar_position: 1
4+
---
5+
6+
import FunctionDescription from '@site/src/components/FunctionDescription';
7+
8+
<FunctionDescription description="Introduced or updated: v1.2.891"/>
9+
10+
import EEFeature from '@site/src/components/EEFeature';
11+
12+
<EEFeature featureName='TABLE VERSIONING'/>
13+
14+
在 FUSE 表上创建命名快照标签。快照标签为表的特定时间点状态创建书签,允许您稍后通过 [AT](../../20-query-syntax/03-query-at.md) 子句查询该状态。
15+
16+
:::note
17+
- 这是一个实验性功能,需要先启用:`SET enable_experimental_table_ref = 1;`
18+
- 仅支持 FUSE 引擎表,不支持 Memory 引擎表和临时表。
19+
:::
20+
21+
## 语法
22+
23+
```sql
24+
ALTER TABLE [<database_name>.]<table_name> CREATE TAG <tag_name>
25+
[ AT (
26+
SNAPSHOT => '<snapshot_id>' |
27+
TIMESTAMP => <timestamp> |
28+
STREAM => <stream_name> |
29+
OFFSET => <time_interval> |
30+
TAG => <tag_name>
31+
) ]
32+
[ RETAIN <n> { DAYS | SECONDS } ]
33+
```
34+
35+
## 参数
36+
37+
| 参数 | 说明 |
38+
|------|------|
39+
| tag_name | 标签名称,在表内必须唯一。 |
40+
| AT | 指定标签引用的快照。如果省略,标签引用当前(最新)快照。支持与 [AT](../../20-query-syntax/03-query-at.md) 子句相同的选项,另外支持 `TAG` 从已有标签复制。 |
41+
| RETAIN | 设置自动过期时间。超过指定时间后,标签将在下次 [VACUUM](/sql/sql-commands/ddl/table/vacuum-table) 操作时被移除。不带 `RETAIN` 的标签会一直存在直到显式删除。 |
42+
43+
## 示例
44+
45+
### 标记当前快照
46+
47+
```sql
48+
SET enable_experimental_table_ref = 1;
49+
50+
CREATE TABLE t1(a INT, b STRING);
51+
INSERT INTO t1 VALUES (1, 'a'), (2, 'b'), (3, 'c');
52+
53+
-- 在当前快照创建标签
54+
ALTER TABLE t1 CREATE TAG v1_0;
55+
56+
-- 插入更多数据
57+
INSERT INTO t1 VALUES (4, 'd'), (5, 'e');
58+
59+
-- 查询标签对应的快照(返回 3 行,而非 5 行)
60+
SELECT * FROM t1 AT (TAG => v1_0) ORDER BY a;
61+
```
62+
63+
### 从已有引用创建标签
64+
65+
```sql
66+
-- 从已有标签复制
67+
ALTER TABLE t1 CREATE TAG v1_0_copy AT (TAG => v1_0);
68+
69+
-- 标记特定快照
70+
ALTER TABLE t1 CREATE TAG before_migration
71+
AT (SNAPSHOT => 'aaa4857c5935401790db2c9f0f2818be');
72+
73+
-- 标记 1 小时前的状态
74+
ALTER TABLE t1 CREATE TAG hourly_checkpoint AT (OFFSET => -3600);
75+
```
76+
77+
### 创建带自动过期的标签
78+
79+
```sql
80+
-- 标签 7 天后过期
81+
ALTER TABLE t1 CREATE TAG temp_tag RETAIN 7 DAYS;
82+
83+
-- 标签 3600 秒后过期
84+
ALTER TABLE t1 CREATE TAG debug_snapshot RETAIN 3600 SECONDS;
85+
```
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
---
2+
title: DROP SNAPSHOT TAG
3+
sidebar_position: 2
4+
---
5+
6+
import FunctionDescription from '@site/src/components/FunctionDescription';
7+
8+
<FunctionDescription description="Introduced or updated: v1.2.891"/>
9+
10+
import EEFeature from '@site/src/components/EEFeature';
11+
12+
<EEFeature featureName='TABLE VERSIONING'/>
13+
14+
从 FUSE 表上删除命名快照标签。删除后,被引用的快照如果没有其他标签或保留策略保护,将可以被垃圾回收。
15+
16+
:::note
17+
- 这是一个实验性功能,需要先启用:`SET enable_experimental_table_ref = 1;`
18+
- 仅支持 FUSE 引擎表。
19+
:::
20+
21+
## 语法
22+
23+
```sql
24+
ALTER TABLE [<database_name>.]<table_name> DROP TAG <tag_name>
25+
```
26+
27+
## 参数
28+
29+
| 参数 | 说明 |
30+
|------|------|
31+
| tag_name | 要删除的快照标签名称。如果标签不存在,将返回错误。 |
32+
33+
## 示例
34+
35+
```sql
36+
SET enable_experimental_table_ref = 1;
37+
38+
CREATE TABLE t1(a INT, b STRING);
39+
INSERT INTO t1 VALUES (1, 'a'), (2, 'b');
40+
41+
-- 创建然后删除标签
42+
ALTER TABLE t1 CREATE TAG v1_0;
43+
ALTER TABLE t1 DROP TAG v1_0;
44+
45+
-- 查询已删除的标签会返回错误
46+
SELECT * FROM t1 AT (TAG => v1_0);
47+
-- Error: tag 'v1_0' not found
48+
```
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"label": "表版本管理",
3+
"position": 21
4+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
title: 表版本管理
3+
---
4+
5+
import EEFeature from '@site/src/components/EEFeature';
6+
7+
<EEFeature featureName='TABLE VERSIONING'/>
8+
9+
表版本管理允许您为 FUSE 表的特定快照创建命名引用。这些引用不受自动保留清理的影响,为您提供稳定、可读的历史表状态指针。
10+
11+
:::note
12+
表版本管理是一个实验性功能,使用前需要启用:
13+
14+
```sql
15+
SET enable_experimental_table_ref = 1;
16+
```
17+
:::
18+
19+
## 快照标签 {#snapshot-tags}
20+
21+
快照标签通过名称固定表的某个时间点状态。创建后,标签会持有对特定快照的引用,您可以随时通过 [AT](../../20-query-syntax/03-query-at.md) 子句查询该状态,无需记录快照 ID 或时间戳。
22+
23+
**使用场景:**
24+
- **发布检查点**:在数据管道运行前后标记表状态,便于比较或回滚。
25+
- **审计与合规**:保留命名快照用于监管审查,无需担心保留期过期。
26+
- **安全实验**:标记当前状态,运行实验性转换,然后查询标签验证变更。
27+
- **可复现分析**:固定数据集版本,确保仪表板和报告始终引用相同数据。
28+
29+
**工作原理:**
30+
31+
快照标签为快照附加一个可读的名称。只要标签存在,被引用的快照就会受到保护,不会被 vacuum 和垃圾回收清理 — 即使保留期已过。
32+
33+
- 不带 `RETAIN` 的标签会一直存在,直到显式删除。
34+
-`RETAIN <n> { DAYS | SECONDS }` 的标签会在指定时间后,在下次 vacuum 操作时自动移除。
35+
36+
**SQL 命令:**
37+
38+
| 命令 | 说明 |
39+
|------|------|
40+
| [CREATE SNAPSHOT TAG](01-create-snapshot-tag.md) | 在表快照上创建命名标签 |
41+
| [DROP SNAPSHOT TAG](02-drop-snapshot-tag.md) | 删除快照标签 |

docs/cn/sql-reference/10-sql-commands/00-ddl/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ title: DDL(Data Definition Language)命令
1010
|-----------|-------------|
1111
| **[数据库](00-database/index.md)** | 创建、修改和删除数据库 |
1212
| **[](01-table/index.md)** | 创建、修改和管理表 |
13+
| **[表版本管理 (Table Versioning)](21-table-versioning/index.md)** | 创建命名快照标签用于时间回溯 |
1314
| **[视图 (View)](05-view/index.md)** | 基于查询创建和管理虚拟表 |
1415

1516
## 性能和索引

docs/cn/sql-reference/10-sql-commands/20-query-syntax/03-query-at.md

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ AT (
2121
SNAPSHOT => '<snapshot_id>' |
2222
TIMESTAMP => <timestamp> |
2323
STREAM => <stream_name> |
24-
OFFSET => <time_interval>
24+
OFFSET => <time_interval> |
25+
TAG => <tag_name>
2526
)
2627
```
2728

@@ -31,6 +32,7 @@ AT (
3132
| TIMESTAMP | 指定要从中检索数据的特定时间戳。 |
3233
| STREAM | 表示查询创建指定流时的数据。 |
3334
| OFFSET | 指定从当前时间回溯的秒数。它应该采用负整数的形式,其中绝对值表示以秒为单位的时间差。例如,`-3600` 表示回溯 1 小时(3,600 秒)。 |
35+
| TAG | 指定通过 `ALTER TABLE ... CREATE TAG` 创建的命名标签,用于查询该标签关联的快照。这是一个实验性功能,需要 `SET enable_experimental_table_ref = 1`。参见[快照标签操作](/sql/sql-commands/ddl/table/alter-table#snapshot-tag-operations)|
3436

3537
## 获取快照 ID 和时间戳
3638

@@ -94,3 +96,26 @@ SELECT * FROM t AT (STREAM => s);
9496
-- 检索表 't' 中的所有列,其中包含 60 秒前的数据
9597
SELECT * FROM t AT (OFFSET => -60);
9698
```
99+
100+
4. 使用命名标签查询数据(实验性功能)。
101+
102+
```sql
103+
SET enable_experimental_table_ref = 1;
104+
105+
-- 在当前快照创建标签
106+
ALTER TABLE t CREATE TAG v1_0;
107+
108+
-- 插入更多数据
109+
INSERT INTO t VALUES(4);
110+
111+
-- 查询标签对应的快照(返回最后一次插入之前的数据)
112+
SELECT * FROM t AT (TAG => v1_0) ORDER BY a;
113+
114+
┌─────────────────┐
115+
│ a │
116+
├─────────────────┤
117+
1
118+
2
119+
3
120+
└─────────────────┘
121+
```

docs/en/guides/57-data-management/01-data-lifecycle.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Databend supports the following objects to create and modify them:
2525
- Grants
2626
- Warehouse
2727
- Task
28+
- [Snapshot Tag](/sql/sql-commands/ddl/table-versioning#snapshot-tags)
2829

2930
## Organizing Data
3031

docs/en/sql-reference/10-sql-commands/00-ddl/01-table/90-alter-table.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,20 @@ CREATE CONNECTION s3_role_conn
359359
ALTER TABLE sales_data CONNECTION=( connection_name = 's3_role_conn' );
360360
```
361361

362+
## Snapshot Tag Operations {#snapshot-tag-operations}
363+
364+
<FunctionDescription description="Introduced or updated: v1.2.891"/>
365+
366+
Creates or drops a named snapshot tag that references a specific FUSE table snapshot. Snapshot tags let you bookmark a point-in-time state of a table so you can query it later with the [AT](../../20-query-syntax/03-query-at.md) clause.
367+
368+
For full details, see:
369+
- [CREATE SNAPSHOT TAG](../21-table-versioning/01-create-snapshot-tag.md)
370+
- [DROP SNAPSHOT TAG](../21-table-versioning/02-drop-snapshot-tag.md)
371+
372+
:::note
373+
Snapshot tags are different from [governance tags](#tag-operations). Snapshot tags bookmark a table snapshot for time travel, while governance tags attach key-value metadata to objects for classification.
374+
:::
375+
362376
## Swap Tables {#swap-tables}
363377

364378
Swaps all table metadata and data between two tables atomically in a single transaction. This operation exchanges the table schemas, including all columns, constraints, and data, effectively making each table take on the identity of the other.
@@ -404,7 +418,7 @@ DESC t2;
404418

405419
## Tag Operations {#tag-operations}
406420

407-
Assigns or removes tags on a table. Tags must be created with [CREATE TAG](../08-tag/01-ddl-create-tag.md) first. For full details, see [SET TAG / UNSET TAG](../08-tag/04-ddl-set-tag.md).
421+
Assigns or removes governance tags on a table. Governance tags are key-value metadata for classification and data governance. Tags must be created with [CREATE TAG](../08-tag/01-ddl-create-tag.md) first. For full details, see [SET TAG / UNSET TAG](../08-tag/04-ddl-set-tag.md).
408422

409423
### Syntax
410424

0 commit comments

Comments
 (0)