开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

flinksql写入es是更新写入吧?

flinksql写入es是更新写入吧?

展开
收起
JWRRR 2023-04-03 14:54:26 344 0
2 条回答
写回答
取消 提交回答
  • 按id更新此回答整理自钉群“【③群】Apache Flink China社区”

    2023-04-03 16:46:19
    赞同 展开评论 打赏
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    flink-sql 写入 Elasticsearch 的行为是可配置的,可以通过 upsert-mode 参数来指定写入模式。upsert-mode 参数有两个可选值:append 和 upsert。

    • append 模式:在此模式下,FlinkSQL 将数据作为新记录插入 Elasticsearch 中。这意味着如果存在相同 ID 的记录,则会插入一条新记录,而不是更新旧记录。如果您使用的是 append 模式,那么每次写入都会生成新的文档。

    • upsert 模式:在此模式下,FlinkSQL 会在写入数据时检查 Elasticsearch 中是否存在相同 ID 的记录。如果存在,则更新记录的现有字段;否则,插入新记录。如果您使用的是 upsert 模式,那么如果存在相同 ID 的记录,则会更新该记录。

    在 CREATE TABLE 语句中,可以指定 upsert-mode 参数。例如,以下示例将创建一个写入 Elasticsearch 的表,并使用 upsert-mode 参数设置为 upsert:

    CREATE TABLE es_table (
      id STRING,
      name STRING,
      age INT,
      PRIMARY KEY (id) NOT ENFORCED
    ) WITH (
      'connector' = 'elasticsearch-7',
      'hosts' = 'http://localhost:9200',
      'index' = 'my_index',
      'document-type' = 'my_type',
      'format' = 'json',
      'upsert-mode' = 'upsert'
    );
    

    需要注意的是,更新 Elasticsearch 中的记录需要记录具有唯一标识符的字段,例如 ID。在创建 Elasticsearch 表时,应该将该字段指定为表的主键。如果没有指定主键,则 FlinkSQL 将无法判断哪些记录应该更新,哪些记录应该插入为新记录。

    2023-04-03 16:02:04
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载