Oracle有些表没有物理主键,同步时传统做法是使用rowid,目前在尝试使用flinkcdc进行数据同步,从flink schema中获取不到rowid。
是最新版本不支持,还是需要设置参数?
Flink CDC Oralce能否获取记录的Rowid
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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 中的数据了。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 python怎么在已有视频文件后添加新帧
- ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
- ¥15 fluent里模拟降膜反应的UDF编写
- ¥15 MYSQL 多表拼接link
- ¥15 关于某款2.13寸墨水屏的问题
- ¥15 obsidian的中文层级自动编号
- ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
- ¥15 神经网络模型一直不能上GPU
- ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
- ¥20 wpf datagrid单元闪烁效果失灵