Skip to content

Commit 8d42167

Browse files
committed
fix: cn errors
1 parent 75b8a7f commit 8d42167

File tree

1 file changed

+32
-35
lines changed
  • docs/cn/guides/40-load-data/05-continuous-data-pipelines

1 file changed

+32
-35
lines changed

docs/cn/guides/40-load-data/05-continuous-data-pipelines/01-stream.md

Lines changed: 32 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,40 @@
11
---
2-
title: 通过Stream跟踪和转换数据
2+
title: 通过 Stream 跟踪和转换数据
33
sidebar_label: Stream
44
---
55

66
import StepsWrap from '@site/src/components/StepsWrap';
77
import StepContent from '@site/src/components/Steps/step-content';
88

9-
Databend中的Stream是表变更的动态实时表示。创建Stream是为了捕获和跟踪关联表的修改,允许在数据变更发生时持续消费和分析这些变更。
9+
Databend 中的 Stream 是表变更的动态实时表示。创建 Stream 是为了捕获和跟踪关联表的修改,允许在数据变更发生时持续消费和分析这些变更。
1010

11-
### Stream的工作原理
11+
### Stream 的工作原理
1212

13-
Stream可以以两种模式运行**标准****仅追加**。在[CREATE STREAM](/sql/sql-commands/ddl/stream/create-stream)时,使用`APPEND_ONLY`参数(默认为`true`)指定模式。
13+
Stream 可以以两种模式运行**标准****仅追加**。在[CREATE STREAM](/sql/sql-commands/ddl/stream/create-stream)时,使用`APPEND_ONLY`参数(默认为`true`)指定模式。
1414

1515
- **标准**:捕获所有类型的数据变更,包括插入、更新和删除。
16-
- **仅追加**:在此模式下,Stream仅包含数据插入记录;不捕获数据更新或删除。
16+
- **仅追加**:在此模式下,Stream 仅包含数据插入记录;不捕获数据更新或删除。
1717

18-
Databend Stream的设计理念是专注于捕获数据的最终状态。例如,如果你插入一个值然后多次更新它,Stream只保留该值在被消费之前的最新状态。以下示例展示了Stream在两种模式下的外观和工作方式
18+
Databend Stream 的设计理念是专注于捕获数据的最终状态。例如,如果你插入一个值然后多次更新它,Stream 只保留该值在被消费之前的最新状态。以下示例展示了 Stream 在两种模式下的外观和工作方式
1919

2020
<StepsWrap>
2121
<StepContent number="1">
2222

23-
#### 创建Stream以捕获变更
23+
#### 创建 Stream 以捕获变更
2424

25-
首先创建两个表,然后为每个表创建一个不同模式的Stream,以捕获表的变更。
25+
首先创建两个表,然后为每个表创建一个不同模式的 Stream,以捕获表的变更。
2626

2727
```sql
2828
-- 创建一个表并插入一个值
2929
CREATE TABLE t_standard(a INT);
3030
CREATE TABLE t_append_only(a INT);
3131

32-
-- 创建两个不同模式的Stream:标准和仅追加
32+
-- 创建两个不同模式的 Stream:标准和仅追加
3333
CREATE STREAM s_standard ON TABLE t_standard APPEND_ONLY=false;
3434
CREATE STREAM s_append_only ON TABLE t_append_only APPEND_ONLY=true;
3535
```
3636

37-
你可以使用[SHOW FULL STREAMS](/sql/sql-commands/ddl/stream/show-streams)命令查看创建的Stream及其模式
37+
你可以使用[SHOW FULL STREAMS](/sql/sql-commands/ddl/stream/show-streams)命令查看创建的 Stream 及其模式
3838

3939
```sql
4040
SHOW FULL STREAMS;
@@ -47,7 +47,7 @@ SHOW FULL STREAMS;
4747
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
4848
```
4949

50-
现在,让我们在每个表中插入两个值,并观察Stream捕获的内容
50+
现在,让我们在每个表中插入两个值,并观察 Stream 捕获的内容
5151

5252
```sql
5353
-- 插入两个新值
@@ -73,7 +73,7 @@ SELECT * FROM s_append_only;
7373
└─────────────────────────────────────────────────────────────────────────────────────────────┘
7474
```
7575

76-
上述结果表明,两个Stream都成功捕获了新的插入。有关结果中Stream列的详细信息,请参见[Stream列](#stream-columns)。现在,让我们更新然后删除一个新插入的值,并检查Stream捕获的内容是否有差异
76+
上述结果表明,两个 Stream 都成功捕获了新的插入。有关结果中 Stream 列的详细信息,请参见[Stream 列](#stream-columns)。现在,让我们更新然后删除一个新插入的值,并检查 Stream 捕获的内容是否有差异
7777

7878
```sql
7979
UPDATE t_standard SET a = 4 WHERE a = 2;
@@ -119,14 +119,14 @@ SELECT * FROM s_append_only;
119119
└─────────────────────────────────────────────────────────────────────────────────────────────┘
120120
```
121121

122-
到目前为止,我们还没有注意到两种模式之间的显著差异,因为我们还没有处理Stream。所有变更都已合并并表现为INSERT操作**Stream可以通过任务、DML(数据操作语言)操作或带有[WITH CONSUME](/sql/sql-commands/query-syntax/with-consume)[WITH Stream Hints](/sql/sql-commands/query-syntax/with-stream-hints)的查询来消费**。消费后,Stream不包含数据,但可以继续捕获新的变更(如果有)。为了进一步分析差异,让我们继续消费Stream并检查输出
122+
到目前为止,我们还没有注意到两种模式之间的显著差异,因为我们还没有处理 Stream。所有变更都已合并并表现为 INSERT 操作**Stream 可以通过任务、DML(数据操作语言)操作或带有[WITH CONSUME](/sql/sql-commands/query-syntax/with-consume)[WITH Stream Hints](/sql/sql-commands/query-syntax/with-stream-hints)的查询来消费**。消费后,Stream 不包含数据,但可以继续捕获新的变更(如果有)。为了进一步分析差异,让我们继续消费 Stream 并检查输出
123123

124124
</StepContent>
125125
<StepContent number="2">
126126

127-
#### 消费Stream
127+
#### 消费 Stream
128128

129-
让我们创建两个新表,并将Stream捕获的内容插入其中
129+
让我们创建两个新表,并将 Stream 捕获的内容插入其中
130130

131131
```sql
132132
CREATE TABLE t_consume_standard(b INT);
@@ -152,7 +152,7 @@ SELECT * FROM t_consume_append_only;
152152
└─────────────────┘
153153
```
154154

155-
如果你现在查询Stream,你会发现它们是空的,因为它们已经被消费了。
155+
如果你现在查询 Stream,你会发现它们是空的,因为它们已经被消费了。
156156

157157
```sql
158158
-- 空结果
@@ -167,7 +167,7 @@ SELECT * FROM s_append_only;
167167

168168
#### 捕获新变更
169169

170-
现在,让我们将每个表中的值从`3`更新为`4`然后再次检查它们的Stream
170+
现在,让我们将每个表中的值从`3`更新为`4`然后再次检查它们的 Stream
171171

172172
```sql
173173
UPDATE t_standard SET a = 4 WHERE a = 3;
@@ -188,9 +188,9 @@ SELECT * FROM s_standard;
188188
SELECT * FROM s_append_only;
189189
```
190190

191-
上述结果表明,标准Stream将UPDATE操作处理为两个动作的组合:一个DELETE动作删除旧值`3`),一个INSERT动作添加新值`4`)。当将`3`更新为`4`时,必须首先删除现有值`3`,因为它不再存在于最终状态中,然后插入新值`4`这种行为反映了标准Stream如何仅捕获最终变更,将更新表示为同一行的删除(删除旧值)和插入(添加新值)的序列。
191+
上述结果表明,标准 Stream 将 UPDATE 操作处理为两个动作的组合:一个 DELETE 动作删除旧值`3`),一个 INSERT 动作添加新值`4`)。当将`3`更新为`4`时,必须首先删除现有值`3`,因为它不再存在于最终状态中,然后插入新值`4`这种行为反映了标准 Stream 如何仅捕获最终变更,将更新表示为同一行的删除(删除旧值)和插入(添加新值)的序列。
192192

193-
另一方面,仅追加Stream没有捕获任何内容,因为它设计为仅记录新数据添加(INSERT),忽略更新或删除。
193+
另一方面,仅追加 Stream 没有捕获任何内容,因为它设计为仅记录新数据添加(INSERT),忽略更新或删除。
194194

195195
如果我们现在删除值`4`,我们可以得到以下结果:
196196

@@ -211,10 +211,7 @@ SELECT * FROM s_standard;
211211
SELECT * FROM s_append_only;
212212
```
213213

214-
我们可以看到,两种Stream模式都能够捕获插入,以及在Stream被消费之前对插入值的任何后续更新和删除。然而,消费后,如果对先前插入的数据进行更新或删除,只有标准Stream能够捕获这些变更,并将其记录为DELETE和INSERT操作。
215-
216-
</StepContent>
217-
</StepsWrap>
214+
我们可以看到,两种 Stream 模式都能够捕获插入,以及在 Stream 被消费之前对插入值的任何后续更新和删除。然而,消费后,如果对先前插入的数据进行更新或删除,只有标准 Stream 能够捕获这些变更,并将其记录为 DELETE 和 INSERT 操作。
218215

219216
</StepContent>
220217
</StepsWrap>
@@ -239,16 +236,16 @@ INSERT INTO table SELECT * FROM stream;
239236

240237
**流不会存储表的任何数据**。在为表创建流后,Databend 会向表中引入特定的隐藏元数据列,用于变更跟踪。这些列包括:
241238

242-
|| 描述 |
243-
| ---------------------- | --------------------------------------------------------------------------------- |
244-
| \_origin_version | 标识最初创建此行的表版本。 |
245-
| \_origin_block_id | 标识此行先前所属的块 ID。 |
246-
| \_origin_block_row_num | 标识此行先前所属块中的行号。 |
239+
| | 描述 |
240+
| ---------------------- | --------------------------------------- |
241+
| \_origin_version | 标识最初创建此行的表版本。 |
242+
| \_origin_block_id | 标识此行先前所属的块 ID。 |
243+
| \_origin_block_row_num | 标识此行先前所属块中的行号。 |
247244
| \_row_version | 标识行版本,从 0 开始,每次更新递增 1。 |
248245

249246
要显示这些列的值,请使用 SELECT 语句:
250247

251-
```sql title='示例:'
248+
```sql title='示例'
252249
CREATE TABLE t(a int);
253250
INSERT INTO t VALUES (1);
254251
CREATE STREAM s ON TABLE t;
@@ -291,13 +288,13 @@ FROM
291288

292289
您可以使用 SELECT 语句直接查询流并获取跟踪的变更。在查询流时,可以考虑包含这些隐藏列以获取有关变更的更多详细信息:
293290

294-
|| 描述 |
295-
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
296-
| change$action | 变更类型:INSERT 或 DELETE。 |
291+
| | 描述 |
292+
| ---------------- | --------------------------------------------------------------------------------------------------------------------- |
293+
| change$action | 变更类型:INSERT 或 DELETE。 |
297294
| change$is_update | 指示 `change$action` 是否为 UPDATE 的一部分。在流中,UPDATE 由 DELETE 和 INSERT 操作的组合表示,此字段设置为 `true`|
298-
| change$row_id | 每行的唯一标识符,用于跟踪变更。 |
295+
| change$row_id | 每行的唯一标识符,用于跟踪变更。 |
299296

300-
```sql title='示例:'
297+
```sql title='示例'
301298
CREATE TABLE t(a int);
302299
INSERT INTO t VALUES (1);
303300
CREATE STREAM s ON TABLE t;
@@ -453,4 +450,4 @@ WHEN stream_status('activities_stream') AS
453450
ON a.user_id = p.user_id
454451
-- 仅包含 action 为 'INSERT' 的行
455452
WHERE a.change$action = 'INSERT';
456-
```
453+
```

0 commit comments

Comments
 (0)