用户自定义source & sink

TableSource提供对存储在外部系统,例如数据库,键值存储,消息队列或文件中的数据的访问。
TableSink 将表发送到外部存储系统,例如数据库,键值存储,消息队列或文件系统(在不同的编码中,例如CSV,Parquet或ORC)。

定义TableSource

TableSource是一个通用接口,它允许Table API和SQL查询访问存储在外部系统中的数据。它提供了表的模式以及映射到具有表模式的行的记录。根据TableSource是在流式查询还是批量查询中使用,记录将生成为DataSet或DataStream。
如果在流查询中使用了一个TableSource,它必须实现StreamTableSource源接口,如果在批处理查询中使用了它,它必须实现BatchTableSource源接口。TableSource还可以实现这两个接口,并用于流查询和批处理查询。
StreamTableSource和BatchTableSource扩展了基本接口TableSource,TableSource定义了以下方法:

TableSource {
  //返回表的结构,即表的字段的名称和类型。
  public TableSchema getTableSchema();
  //返回DataStream(StreamTableSource)或DataSet(BatchTableSource)的物理类型以及TableSource生成的记录。
  public TypeInformation getReturnType();
  //返回描述TableSource的字符串 。此方法是可选的,仅用于显示目的。
  public String explainSource();
}

TableSource接口将逻辑表模式与返回的DataStream或DataSet的物理类型分隔开来。因此,表模式的所有字段(getTableSchema())必须映射到具有相应的物理返回类型(getReturnType())的字段。默认情况下,此映射是基于字段名完成的。

定义BatchTableSource

BatchTableSource接口扩展了TableSource接口,并定义一个额外的方法:

BatchTableSource implements TableSource {
  //返回包含表数据的DataSet。
  public DataSet getDataSet(ExecutionEnvironment execEnv);
}

定义StreamTableSource

StreamTableSource接口扩展了TableSource接口,并定义一个额外的方法:

StreamTableSource implements TableSource {
  //返回带有表数据的DataStream。
  public DataStream getDataStream(StreamExecutionEnvironment execEnv);
}

定义TableSink

TableSink指定如何将表发送到外部系统或位置。 该接口是通用的,因此它可以支持不同的存储位置和格式。 批处理表和流表有不同的表接收器。通用接口定义如下所示:

TableSink {

  public TypeInformation getOutputType();

  public String[] getFieldNames();

  public TypeInformation[] getFieldTypes();

  public TableSink configure(String[] fieldNames, TypeInformation[] fieldTypes);
}

BatchTableSink

定义一个外部TableSink以发出一个批处理表。

该接口如下所示:

BatchTableSink implements TableSink {

  public void emitDataSet(DataSet dataSet);
}

AppendStreamTableSink

定义拓展TableSink以发出仅包含插入更改的流表。
接口定义如下:

AppendStreamTableSink implements TableSink {

  public void emitDataStream(DataStream dataStream);
}

RetractStreamTableSink

定义拓展TableSink以发出包含插入,更新和删除更改的流表。

接口定义如下:

RetractStreamTableSink implements TableSink> {

  public TypeInformation getRecordType();

  public void emitDataStream(DataStream> dataStream);
}

该表将被转换为累积和撤销消息流,这些消息被编码为Java Tuple2。 第一个字段是一个布尔标志,用于指示消息类型(true表示插入,false表示删除)。 第二个字段保存所请求类型T的记录。

UpsertStreamTableSink

定义拓展TableSink以发出包含插入,更新和删除更改的流表。
接口定义如下:

UpsertStreamTableSink implements TableSink> {

  public void setKeyFields(String[] keys);

  public void setIsAppendOnly(boolean isAppendOnly);

  public TypeInformation getRecordType();

  public void emitDataStream(DataStream> dataStream);
}

该表必须具有唯一的键字段(原子或复合)或仅附加。 如果表没有唯一键且不是仅附加,则抛出TableException。 表的唯一键由UpsertStreamTableSin 的 setKeyFields()方法配置。
该表将被转换为upsert和delete消息流,这些消息被编码为Java Tuple2。 第一个字段是一个布尔标志,用于指示消息类型。 第二个字段保存所请求类型T的记录。
具有true标记的布尔字段的消息是已配置密钥的upsert消息。 带有false标志的消息是已配置密钥的delete消息。 如果表是仅附加的,则所有消息都将具有true标志,并且必须解释为插入。

定义TableFactory

TableFactory允许从基于字符串的属性创建不同的表相关实例。 调用所有可用工厂以匹配给定的属性集和相应的工厂类。
每个表工厂都需要实现以下接口:

package org.apache.flink.table.factories;

interface TableFactory {

  Map requiredContext();

  List supportedProperties();
}

你可能感兴趣的:(用户自定义source & sink)