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

请教一个 hudi 问题: 我设置了 option(OPERATION_OPT_KEY, "inse

请教一个 hudi 问题: 我设置了 option(OPERATION_OPT_KEY, "insert") ,结果遇到相同的 uuid ,数据还是update了。。。我只想 insert 进去,即使相同的 uuid ,也是 insert 而不是 update,要怎么做?

展开
收起
游客3oewgrzrf6o5c 2022-07-14 14:53:27 504 0
1 条回答
写回答
取消 提交回答
  • 全栈JAVA领域创作者

    如果您设置了 OPERATION_OPT_KEY 为 insert,但是数据仍然被更新为 update,可能是因为您的数据中存在唯一键(例如主键或外键),这些唯一键可能与已有的记录匹配,导致数据被更新而不是插入。
    为了确保数据插入而不是更新,您可以在写入数据之前检查数据是否已存在。如果数据已存在,您可以选择覆盖原有数据或者跳过该数据。这可以通过编写自定义的 BeforeInsertHook 或 BeforeUpdateHook 来实现。
    以下是 BeforeInsertHook 的示例代码,它会检查数据是否已存在,如果已存在,则跳过插入操作:

    public class MyHook implements BeforeInsertHook<Row> {
        @Override
        public void beforeInsert(Row row, RecordCollector<Row> collector) {
            // 检查数据是否已存在
            if (isExist(row)) {
                // 跳过插入操作
                return;
            }
            // 执行插入操作
            collector.collect(row);
        }
    
        private boolean isExist(Row row) {
            // 检查数据是否存在的逻辑
            // ...
        }
    }
    

    如果您需要覆盖原有的数据,可以使用 overwrite 参数来指示是否覆盖原有的数据。例如:

    // 写入数据
    HudiUtils.writeToHudiTable(
            new InsertJobConfig(),
            new TableConfig(),
            new Record(row),
            new RecordCollectorImpl(),
            new BeforeInsertHook() {
                @Override
                public void beforeInsert(Row row, RecordCollector<Row> collector) {
                    // 执行插入操作
                    collector.collect(row);
                }
            },
            new BeforeUpdateHook() {
                @Override
                public void beforeUpdate(Row row, RecordCollector<Row> collector) {
                    // 执行更新操作
                    collector.collect(row);
                }
            },
            new OperationOptionBuilder().setOperationOptKey(OPERATION_OPT_KEY).setOverwrite(true).build());
    

    希望这些信息能够帮助您解决问题。

    2023-08-05 07:44:00
    赞同 展开评论 打赏

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

相关电子书

更多
Dynamic DDL Adding Structure to Streaming Data on the Fly 立即下载
Apache Spark at Scale: A 60 TB+ production use case 立即下载
Show Me The Money! Cost & Resource Tracking for Hadoop & Storm 立即下载