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


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


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

用法:

from_data_stream(data_stream: pyflink.datastream.data_stream.DataStream, *fields_or_schema: Union[pyflink.table.expression.Expression, pyflink.table.schema.Schema]) → pyflink.table.table.Table

  1. 当fields_or_schema 是一个表达式序列时:

    将给定的DataStream 转换为具有指定字段名称的表。

    将原始字段映射到Table的字段有两种模式:

    1. 按名称引用输入字段:

    架构定义中的所有字段都由名称引用(并且可能使用和别名 (as) 重命名。此外,我们可以使用任意名称在任意位置定义 proctime 和 rowtime 属性(结果架构中存在的除外)。在这种模式下, 字段可以重新排序和投影。此模式可用于任何输入类型。

    1. 按位置引用输入字段:

    在这种模式下,字段被简单地重命名。 Event-time 属性可以替换其在输入数据中的位置上的字段(如果它是正确的类型)或附加在末尾。 Proctime 属性必须附加在末尾。仅当输入类型具有已定义的字段顺序(元组、案例类、行)并且没有任何字段引用输入类型的字段时,才能使用此模式。

  2. 当fields_or_schema 是模式时:

    将给定的DataStream 转换为表格。

    Table 的列名和类型自动派生自 DataStream 的TypeInformation。如果最外层记录的TypeInformation 是 CompositeType,它将在第一层被展平。复合嵌套字段将不可访问。

    由于DataStream API 本身不支持变更日志处理,因此此方法在stream-to-table 转换期间假定append-only/insert-only 语义。类 Row 的记录必须说明 RowKind.INSERT 更改。

    默认情况下,除非明确声明,否则不会传播流记录的时间戳和水印。

    此方法允许为结果表声明一个模式。该声明类似于 SQL 中的 {@code CREATE TABLE} DDL,并允许:

    1. 使用自定义 DataType 丰富或覆盖自动派生列

    2. 重新排序列

    3. 在物理列旁边添加计算列或元数据列

    4. 访问流记录的时间戳

    5. 声明水印策略或传播DataStream水印

    可以声明没有物理/常规列的模式。在这种情况下,这些列将自动派生并隐式放置在模式声明的开头。

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

    例子:

    === EXAMPLE 1 ===
    
    no physical columns defined, they will be derived automatically,
    e.g. BigDecimal becomes DECIMAL(38, 18)
    
    >>> Schema.new_builder()                 ...     .column_by_expression("c1", "f1 + 42")                 ...     .column_by_expression("c2", "f1 - 1")                 ...     .build()
    
    equal to: CREATE TABLE (f0 STRING, f1 DECIMAL(38, 18), c1 AS f1 + 42, c2 AS f1 - 1)
    
    === EXAMPLE 2 ===
    
    physical columns defined, input fields and columns will be mapped by name,
    columns are reordered and their data type overwritten,
    all columns must be defined to show up in the final table's schema
    
    >>> Schema.new_builder()                 ...     .column("f1", "DECIMAL(10, 2)")                 ...     .column_by_expression("c", "f1 - 1")                 ...     .column("f0", "STRING")                 ...     .build()
    
    equal to: CREATE TABLE (f1 DECIMAL(10, 2), c AS f1 - 1, f0 STRING)
    
    === EXAMPLE 3 ===
    
    timestamp and watermarks can be added from the DataStream API,
    physical columns will be derived automatically
    
    >>> Schema.new_builder()                 ...     .column_by_metadata("rowtime", "TIMESTAMP_LTZ(3)")                 ...     .watermark("rowtime", "SOURCE_WATERMARK()")                 ...     .build()
    
    equal to:
        CREATE TABLE (
            f0 STRING,
            f1 DECIMAL(38, 18),
            rowtime TIMESTAMP(3) METADATA,
            WATERMARK FOR rowtime AS SOURCE_WATERMARK()
        )

    注意

    create_temporary_view 通过提供 Schema(案例 2.)是从 flink 1.14.0 添加的。

参数:

  • data_stream- 要转换的数据流。

  • fields_or_schema- 将DataStream 的原始字段映射到表格的字段或最终表格的自定义模式的字段表达式。

返回:

转换后的表。

版本 1.12.0 中的新函数。

相关用法


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