lq1205990816 2023-03-08 16:34 采纳率: 0%
浏览 8

Flink CDC Oralce能否获取记录的Rowid

Oracle有些表没有物理主键,同步时传统做法是使用rowid,目前在尝试使用flinkcdc进行数据同步,从flink schema中获取不到rowid。
是最新版本不支持,还是需要设置参数?

  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-03-08 18:38
    关注

    “Devil组”引证GPT后的撰写:

    • Flink CDC 目前不支持使用 Oracle 的 rowid 进行数据同步。在 Flink CDC 中,可以使用物理主键或者唯一键来进行数据同步。如果您的 Oracle 表中没有物理主键或唯一键,可以通过在表上创建唯一索引或使用 Oracle 序列来创建一个人工主键来解决该问题。
    • 如果已经创建了唯一索引或使用 Oracle 序列来创建了人工主键,可以在 Flink CDC 中使用该主键进行数据同步。您可以使用 Flink 的 jdbc connector 连接到 Oracle 数据库,并在 catalog 和 table 中指定表和主键。

    例如,使用以下 SQL 语句在 Oracle 中创建一个人工主键:

    ALTER TABLE your_table ADD (id NUMBER(10) NOT NULL);
    CREATE SEQUENCE your_table_seq START WITH 1 INCREMENT BY 1;
    UPDATE your_table SET id = your_table_seq.NEXTVAL;
    ALTER TABLE your_table ADD CONSTRAINT your_table_pk PRIMARY KEY (id);
    
    
    

    然后,在 Flink CDC 中,可以使用以下代码指定主键并连接到 Oracle 数据库:

    String ddl = "CREATE TABLE your_table (id INT NOT NULL, col1 STRING, col2 INT, PRIMARY KEY (id)) WITH (...)";
    String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:ORCL";
    String username = "your_username";
    String password = "your_password";
    
    JdbcTableSource jdbcTableSource = JdbcTableSource.builder()
        .setDrivername("oracle.jdbc.OracleDriver")
        .setDBUrl(jdbcUrl)
        .setUsername(username)
        .setPassword(password)
        .setTableName("your_table")
        .setPrimaryKey("id")
        .build();
    
    StreamTableEnvironment tableEnv = StreamTableEnvironment.create(streamExecutionEnvironment);
    tableEnv.registerTableSource("your_table", jdbcTableSource);
    
    Table resultTable = tableEnv.sqlQuery("SELECT * FROM your_table");
    
    
    

    要替换 your_table、jdbcUrl、username 和 password 为表名、Oracle 数据库连接信息和您的用户名和密码。同时,需要在 JdbcTableSource 中使用 setPrimaryKey 方法来指定主键。在这个示例中,用 id 字段作为主键。最后,在 StreamTableEnvironment 中使用 registerTableSource 方法将 JDBC 表注册到 Flink 的表环境中,然后就可以使用 SQL 查询来查询 Oracle 中的数据了。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月8日

悬赏问题

  • ¥15 python怎么在已有视频文件后添加新帧
  • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵