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

各位大佬 有没有遇到过这样一个问题 flink cdc 读取oracle ,表中原本数据可以正常读?

各位大佬 有没有遇到过这样一个问题 flink cdc 读取oracle ,表中原本数据可以正常读取,在使用oracle客户端插入数据时,flink cdc 报错 com.ververica.cdc.connectors.shaded.org.apache.kafka.connect.errors.DataException: file is not a valid field name

flink 1.15.3
oracle 19c
flink cdc 2.3.0

oracle建表语句:
CREATE TABLE hcuser.HCTEST(
PERSON_ID NUMBER NOT NULL,
FIRST_NAME VARCHAR2(50) NOT NULL,
LAST_NAME VARCHAR2(50) NOT NULL,
PRIMARY KEY(PERSON_ID)
);
oracle插入数据:
insert into hcuser.HCTEST values (3,'hc','hc');

flink建表语句:
set execution.checkpointing.interval=3000;
CREATE TABLE hctest (
PERSON_ID INT NOT NULL,
FIRST_NAME STRING NOT NULL,
LAST_NAME STRING NOT NULL,
PRIMARY KEY(PERSON_ID) NOT ENFORCED
) WITH (
'connector' = 'oracle-cdc',
'scan.startup.mode' = 'initial',
'hostname' = 'xxx',
'port' = '1521',
'username' = 'xxx',
'password' = 'xxx',
'database-name' = 'oatest',
'schema-name' = 'hcuser',
'table-name' = 'HCTEST'
);

展开
收起
真的很搞笑 2023-07-13 11:51:38 156 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    这个错误可能与数据类型或字段名有关。具体来说,可能是因为 Flink CDC 在读取 Oracle 数据库表时,无法解析新插入数据的字段名或数据类型,导致了该错误的发生。

    为了解决这个问题,您可以尝试以下几个方法:

    检查数据类型和字段名:请检查您新插入的数据的数据类型和字段名是否符合 Oracle 数据库表的定义。如果新插入的数据的数据类型或字段名与表定义不一致,可能会导致 Flink CDC 无法解析该数据,从而导致该错误的发生。

    调整 Flink CDC 连接器的配置:请检查 Flink CDC 连接器的配置是否正确,包括批处理大小、最大事务延迟等参数。建议您参考 Flink 官方文档中的相关章节,优化 Flink CDC 连接器的配置。

    升级 Flink 版本:如果您正在使用较旧版本的 Flink,可能会存在一些已知的问题和 bug。建议您升级至最新版本的 Flink,以获得更好的性能和稳定性。

    2023-07-30 09:37:15
    赞同 展开评论 打赏
  • 是的,您遇到的问题可能是由于 Flink CDC 配置中的参数错误导致的。根据您提供的信息,表中的原始数据可以正常读取,但在使用 Oracle 客户端插入数据时,Flink CDC 报错 "file is not a valid field name"。根据这个报错信息,问题可能出现在 Flink CDC 的配置中。

    具体来说,您的 Flink CDC 表的配置中,database-name 参数应该使用大写字母,而不是小写字母。请将 'database-name' = 'oatest' 更改为 'DATABASE-NAME' = 'OATEST'。Oracle 数据库的名称是区分大小写的,因此在配置 Flink CDC 任务时,请确保准确使用大写字母指定数据库名称。

    修改后的 Flink CDC 表的建表语句如下所示:

    set execution.checkpointing.interval=3000;
    CREATE TABLE hctest (
    PERSON_ID INT NOT NULL,
    FIRST_NAME STRING NOT NULL,
    LAST_NAME STRING NOT NULL,
    PRIMARY KEY(PERSON_ID) NOT ENFORCED
    ) WITH (
    'connector' = 'oracle-cdc',
    'scan.startup.mode' = 'initial',
    'hostname' = 'xxx',
    'port' = '1521',
    'username' = 'xxx',
    'password' = 'xxx',
    'DATABASE-NAME' = 'OATEST',
    'schema-name' = 'hcuser',
    'table-name' = 'HCTEST'
    );
    

    请注意,Flink CDC 对 Oracle 数据库的支持可能因版本而异。如果修改 database-name 后仍然遇到问题,请确保您使用的 Flink CDC 版本与 Oracle 数据库 19c 兼容,并检查其他配置参数是否正确设置。

    2023-07-29 22:52:29
    赞同 展开评论 打赏
  • database-name配置要大写,此回答整理自钉群“Flink CDC 社区”

    2023-07-13 15:47:02
    赞同 展开评论 打赏

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

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践 立即下载
    PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
    Oracle云上最佳实践 立即下载

    相关镜像