Flink SQL 数据sink到mysql时,非空列存在null值问题

flink sql 数据sink到mysql时,非空存在null值,插入mysql报错,配置下面的参数进行解决:

-- 默认值error
table.exec.sink.not-null-enforcer   

对表的NOT NULL列约束强制执行不能将空值插入到表中。

Flink支持“error”(默认)和“drop”强制行为

  • 默认情况下,当将空值写入NOT NULL列时,Flink将检查值并引发运行时异常。
  • 用户可以将行为更改为“drop”,以在不引发异常的情况下静默删除此类记录。

代码配置:

// instantiate table environment
val tEnv: TableEnvironment = ...

// access flink configuration
val configuration = tEnv.getConfig().getConfiguration()
// set low-level key-value options
configuration.setString("table.exec.sink.not-null-enforcer", "drop")
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
FlinkSQLFlink 中提供的一种 SQL 执行方式,它可以让用户使用 SQL 语句进行流式数据处理。在 FlinkSQL 中,自定义 Sink 可以用于将处理结果输出到外部存储介质,如 MySQL、ES 等。 首先,在自定义 Sink 之前,需要先定义一个类,继承 Flink 的 RichSinkFunction 接口。该接口包含 open、invoke 和 close 三个方法,分别用于 Sink 的初始化、数据输出和资源释放。自定义 Sink 类应该重写 invoke 方法,用于输出数据。 接下来,在 FlinkSQL 中,使用 CREATE TABLE 定义表,可以指定表的输出方式为自定义 Sink。例如,定义一个输出流,并将结果输出到 MySQL 中,可以按以下方式定义表: ``` CREATE TABLE result ( word VARCHAR, count BIGINT ) WITH ( 'connector' = 'jdbc', 'url' = 'jdbc:mysql://localhost:3306/test', 'table-name' = 'result', 'username' = 'root', 'password' = 'root', 'sink.buffer-flush.max-rows' = '500', 'sink.buffer-flush.interval' = '2s', 'sink.max-retries' = '5' ) ``` 上述代码中,定义了一个名为 result 的表,其中 word 和 count 字段分别表示统计结果中的单词和出现次数。通过 WITH 关键字,在该表中定义了一个自定义 Sink,并指定了输出的目标地址为本地的 MySQL 数据库,配置了一些参数,如输出缓存刷写的条数、刷写的间间隔以及重试次数等。 以上是 FlinkSQL 自定义 Sink 的简单介绍,通过自定义 Sink,在 FlinkSQL 中可以很方便地将处理结果输出到外部存储介质。同,需要根据需求对自定义 Sink 进行优化,尽可能提高数据输出的效率和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾岛与鲸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值