Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 27 additions & 3 deletions docs/content.zh/docs/dev/table/concepts/time_attributes.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ under the License.

Flink 可以基于几种不同的 *时间* 概念来处理数据。

- *处理时间* 指的是执行具体操作时的机器时间(也称作"挂钟时间"
- *处理时间* 指的是执行具体操作时的机器时间(大家熟知的绝对时间, 例如 Java的 `System.currentTimeMillis()`)
- *事件时间* 指的是数据本身携带的时间。这个时间是在事件产生时的时间。
- *摄入时间* 指的是数据进入 Flink 的时间;在系统内部,会把它当做事件时间来处理。

Expand Down Expand Up @@ -94,7 +94,7 @@ env.set_stream_time_characteristic(TimeCharacteristic.ProcessingTime) # default

### 在创建表的 DDL 中定义

处理时间属性可以在创建表的 DDL 中用计算列的方式定义,用 `PROCTIME()` 就可以定义处理时间。关于计算列,更多信息可以参考:[CREATE TABLE DDL]({{< ref "docs/dev/table/sql/create" >}}#create-table)
处理时间属性可以在创建表的 DDL 中用计算列的方式定义,用 `PROCTIME()` 就可以定义处理时间,函数 `PROCTIME()` 的返回类型是 TIMESTAMP_LTZ 。关于计算列,更多信息可以参考:[CREATE TABLE DDL]({{< ref "docs/dev/table/sql/create" >}}#create-table)

```sql

Expand Down Expand Up @@ -233,6 +233,10 @@ val windowedTable = tEnv

事件时间属性可以用 WATERMARK 语句在 CREATE TABLE DDL 中进行定义。WATERMARK 语句在一个已有字段上定义一个 watermark 生成表达式,同时标记这个已有字段为时间属性字段。更多信息可以参考:[CREATE TABLE DDL]({{< ref "docs/dev/table/sql/create" >}}#create-table)

Flink supports defining event time attribute on TIMESTAMP column and TIMESTAMP_LTZ column.
If the data source contains timestamp literal, it's recommended to defining event time attribute on TIMESTAMP column:

Flink 支持和在 TIMESTAMP 列和 TIMESTAMP_LTZ 列上定义事件时间。如果源数据中的时间戳数据表示为年-月-日-时-分-秒,则通常为不带时区信息的字符串值,例如 `2020-04-15 20:13:40.564`,建议将事件时间属性定义在 `TIMESTAMP` 列上:
```sql

CREATE TABLE user_actions (
Expand All @@ -251,10 +255,30 @@ GROUP BY TUMBLE(user_action_time, INTERVAL '10' MINUTE);

```

源数据中的时间戳数据表示为一个纪元 (epoch) 时间,通常是一个 long 值,例如 `1618989564564`,建议将事件时间属性定义在 `TIMESTAMP_LTZ` 列上:
```sql

CREATE TABLE user_actions (
user_name STRING,
data STRING,
ts BIGINT,
time_ltz AS TO_TIMESTAMP_LTZ(time_ltz, 3),
-- declare time_ltz as event time attribute and use 5 seconds delayed watermark strategy
WATERMARK FOR time_ltz AS time_ltz - INTERVAL '5' SECOND
) WITH (
...
);

SELECT TUMBLE_START(time_ltz, INTERVAL '10' MINUTE), COUNT(DISTINCT user_name)
FROM user_actions
GROUP BY TUMBLE(time_ltz, INTERVAL '10' MINUTE);

```

### 在 DataStream 到 Table 转换时定义

事件时间属性可以用 `.rowtime` 后缀在定义 `DataStream` schema 的时候来定义。[时间戳和 watermark]({{< ref "docs/concepts/time" >}}) 在这之前一定是在 `DataStream` 上已经定义好了。
事件时间属性可以用 `.rowtime` 后缀在定义 `DataStream` schema 的时候来定义。[时间戳和 watermark]({{< ref "docs/concepts/time" >}}) 在这之前一定是在 `DataStream` 上已经定义好了。
在从 DataStream 转换到 Table 时,由于 `DataStream` 没有时区概念,因此 Flink 总是将 `rowtime` 属性解析成 `TIMESTAMP WITHOUT TIME ZONE` 类型,并且将所有事件时间的值都视为 UTC 时区的值。

在从 `DataStream` 到 `Table` 转换时定义事件时间属性有两种方式。取决于用 `.rowtime` 后缀修饰的字段名字是否是已有字段,事件时间字段可以是:

Expand Down
Loading