当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python pyflink StreamTableEnvironment.to_changelog_stream用法及代码示例


本文简要介绍 python 语言中pyflink.table.StreamTableEnvironment.to_changelog_stream的用法。

用法:

to_changelog_stream(table: pyflink.table.table.Table, target_schema: pyflink.table.schema.Schema = None, changelog_mode: pyflink.table.changelog_mode.ChangelogMode = None) → pyflink.datastream.data_stream.DataStream

将给定的表转换为 DataStream 的变更日志条目。

to_data_stream() 相比,此方法生成 Row 实例并在运行时设置每个记录中包含的 RowKind 标志。运行时行为与 DynamicTableSink 类似。

如果不指定changelog_mode,则将包含各种更改(在 RowKind 中枚举)的更改日志作为默认的 ChangelogMode。

给定的 Schema 用于配置表运行时以将列和内部数据结构转换为所需的表示形式。以下示例显示如何将表列转换为 Row 类型。

例子:

>>> table_env.to_changelog_stream(
...     table,
...     Schema.new_builder()             ...         .column("id", DataTypes.BIGINT())
...         .column("payload", DataTypes.ROW(
...                                     [DataTypes.FIELD("name", DataTypes.STRING()),
...                                     DataTypes.FIELD("age", DataTypes.INT())]))
...         .build())

请注意,表生态系统的类型系统比DataStream API 的类型系统更丰富。表运行时将确保正确地将输出记录序列化到DataStream API 的第一个运算符。之后,需要考虑DataStream API 的类型语义。

如果输入表包含单个行时间列,它将被传播到流记录的时间戳中。水印也将被传播。

如果行时间不再是最后一行中的具体字段,或者 from_changelog_stream()to_changelog_stream() 的架构应该是对称的,则行时间也可以声明为元数据列,该元数据列将传播到流记录的时间戳中。可以声明没有物理/常规列的模式。在这种情况下,这些列将自动派生并隐式放置在模式声明的开头。

以下示例说明了常见的模式声明及其语义:

例子:

given a Table of (id INT, name STRING, my_rowtime TIMESTAMP_LTZ(3))

=== EXAMPLE 1 ===

no physical columns defined, they will be derived automatically,
the last derived physical column will be skipped in favor of the metadata column

>>> Schema.new_builder()             ...     .column_by_metadata("rowtime", "TIMESTAMP_LTZ(3)")             ...     .build()

equal to: CREATE TABLE (id INT, name STRING, rowtime TIMESTAMP_LTZ(3) METADATA)

=== EXAMPLE 2 ===

physical columns defined, all columns must be defined

>>> Schema.new_builder()             ...     .column("id", "INT")             ...     .column("name", "STRING")             ...     .column_by_metadata("rowtime", "TIMESTAMP_LTZ(3)")             ...     .build()

equal to: CREATE TABLE (id INT, name STRING, rowtime TIMESTAMP_LTZ(3) METADATA)

参数:

  • table- 要转换的表格。它可以是更新或insert-only。

  • target_schema- 决定DataStream 记录中最终外部表示的模式。

  • changelog_mode- 结果更改日志中所需的更改类型。如果给定的更新表无法在此更改日志模式中表示,则会引发异常。

返回:

Row 转换后的变更日志流。

相关用法


注:本文由纯净天空筛选整理自apache.org大神的英文原创作品 pyflink.table.StreamTableEnvironment.to_changelog_stream。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。