首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >debezium -主题名称的更改给出了错误的跨数据库引用。

debezium -主题名称的更改给出了错误的跨数据库引用。
EN

Stack Overflow用户
提问于 2019-01-29 10:03:45
回答 2查看 1.6K关注 0票数 2

我正在使用这个debezium-示例

source.json

代码语言:javascript
复制
{
"name": "inventory-connector",
"config": {
    "connector.class": "io.debezium.connector.mysql.MySqlConnector",
    "tasks.max": "1",
    "database.hostname": "mysql",
    "database.port": "3306",
    "database.user": "debezium",
    "database.password": "dbz",
    "database.server.id": "184054",
    "database.server.name": "dbserver1",
    "database.whitelist": "inventory",
    "database.history.kafka.bootstrap.servers": "kafka:9092",
    "database.history.kafka.topic": "schema-changes.inventory",
    "transforms": "route",
    "transforms.route.type": "org.apache.kafka.connect.transforms.RegexRouter",
    "transforms.route.regex": "([^.]+)\\.([^.]+)\\.([^.]+)",
    "transforms.route.replacement": "$3"
}
}

jdbc-sink.json

代码语言:javascript
复制
{
"name": "jdbc-sink",
"config": {
    "connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
    "tasks.max": "1",
    "topics": "customers",
    "connection.url": "jdbc:postgresql://postgres:5432/inventory?user=postgresuser&password=postgrespw",
    "transforms": "unwrap",
    "transforms.unwrap.type": "io.debezium.transforms.UnwrapFromEnvelope",
    "auto.create": "true",
    "insert.mode": "upsert",
    "pk.fields": "id",
    "pk.mode": "record_value"
}
}

当我在下面的场景中进行一些更改时,我已经运行了这个示例--它正在工作的fine.But。它给了我“跨数据库引用”的错误。

场景

我已经从源代码中删除了这些属性。

代码语言:javascript
复制
    "transforms": "route",
    "transforms.route.type": "org.apache.kafka.connect.transforms.RegexRouter",
    "transforms.route.regex": "([^.]+)\\.([^.]+)\\.([^.]+)",
    "transforms.route.replacement": "$3"

现在,它在卡夫卡中创造了如下主题

代码语言:javascript
复制
dbServer1.inventory.products

dbserver1.inventory.products_on_hand

dbserver1.inventory.customers

dbserver1.inventory.orders

当我在jdbc-接收器中指定topic= dbserver1.inventory.customers时,它给出了以下异常

代码语言:javascript
复制
 ERROR:  cross-database references are not implemented: 
"dbserver1.inventory.customers" at character 14
postgres_1   | STATEMENT:  CREATE TABLE "dbserver1"."inventory"."customers" (
postgres_1   |  "last_name" TEXT NOT NULL,
postgres_1   |  "id" INT NOT NULL,
postgres_1   |  "first_name" TEXT NOT NULL,
postgres_1   |  "email" TEXT NOT NULL,
postgres_1   |  PRIMARY KEY("id"))
connect_1    | 2019-01-29 09:39:18,931 WARN   ||  Create failed, will attempt amend if table already exists   [io.confluent.connect.jdbc.sink.DbStructure]
connect_1    | org.postgresql.util.PSQLException: ERROR: cross-database references are not implemented: "dbserver1.inventory.customers"
connect_1    |   Position: 14

注:它不重复,因为其他问题也由我张贴,其中涉及不同的情况。

EN

回答 2

Stack Overflow用户

发布于 2020-04-09 02:16:14

变更库存-> dbserver1

(databasename).(schemaname).(tablename)

代码语言:javascript
复制
{
"name": "jdbc-sink",
"config": {
    "connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
    "tasks.max": "1",
    "topics": "customers",
    "connection.url": "jdbc:postgresql://postgres:5432/dbserver1?user=postgresuser&password=postgrespw",
    "transforms": "unwrap",
    "transforms.unwrap.type": "io.debezium.transforms.UnwrapFromEnvelope",
    "auto.create": "true",
    "insert.mode": "upsert",
    "pk.fields": "id",
    "pk.mode": "record_value"
}
}
票数 1
EN

Stack Overflow用户

发布于 2021-03-18 09:56:31

table.name.format接收器属性为我解决了这个问题。它允许您覆盖目标表名称。请参阅options.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54418451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档