本文的Flink源码版本为: 1.15-SNAPSHOT,读者可自行从Github clone.
虽然不同的关系型数据库均遵循一定的统一标准,但各自的Driver实现,增删改查的SQL语法等可能略有不同。就跟中国话也有各地区的方言一样,数据库也有属于自己的"方言",即JdbcDialect。
JdbcDialect
在Flink中,JdbcDialect被定义为1个接口。
public interface JdbcDialect extends Serializable {
// 方言名称
String dialectName();
// 获取数据类型转换器,用于将JDBC对象转化为Flink的内部对象
JdbcRowConverter getRowConverter(RowType rowType);
// 返回数据库的limit语句
String getLimitClause(long limit);
// 校验行数据类型
void validate(RowType rowType) throws ValidationException;
// 返回默认的驱动名称
default Optional<String> defaultDriverName() {
return Optional.empty();
}
// 返回分隔符
String quoteIdentifier(String identifier);
// 返回Upsert SQL,实现幂等插入
Optional<String> getUpsertStatement(
String tableName, String[] fieldNames, String[] uniqueKeyFields);