使用clickhouse-jdbc-bridge将数据从clickhouse复制到oracle

问题描述 投票:0回答:1

非常奇怪的情况。我使用简单的复制模式。 源表 1857428 行,在 Oracle 中复制后目标表 3132400 行。

  1. Oracle:Oracle Database 12c 企业版版本 12.2.0.1.0 - 64 位
  2. Clickhouse:20.1.4.20
  3. clickhouse_jdbc-bridge:clickhouse-jdbc-bridge-2.1.0-1
  4. 数据源配置: /etc/clickhouse-jdbc-bridge/config/datasources/ora.json
{
"$schema": "/etc/clickhouse-jdbc-bridge/config/datasource.jschema",
  "ora": {
  "driverUrls": [
    "/u01/drivers/ojdbc8-19.3.0.0.jar"
  ],
  "connectionTestQuery": "select 1 from dual",
  "driverClassName": "oracle.jdbc.driver.OracleDriver",
  "jdbcUrl": "jdbc:oracle:thin:@//1.2.3.4:1521/nsser",
  "username": "usr",
  "password": "pwd",
  "maximumPoolSize": 20,
  "MaxLifetime": 720000
  }
}

在 clickhouse 中我有桌子:

CREATE TABLE mac.ch_cfc_str
(
    id_contract Int64,
    lot_id         Int64,
    doc_num        FixedString(19),--String,
    customer       Int64,
    sign_date      DateTime,
    sign_number    FixedString(100),--String,
    version        Int64,
    type_info      Int64,
    date_cache     Int64,
    datecalc_cache Int64
)
ENGINE = MergeTree
ORDER BY (datecalc_cache, date_cache, type_info) ---- м.б. doc_num сюда
SETTINGS index_granularity = 8192;

With data:
1 857 428 rows.
select sum(1) from mac.ch_cfc_str;


CREATE TABLE mac.ora_cfc(
  sign_date      DateTime,
  sign_number    String,
  doc_num        String,
  datecalc_cache Decimal(10,4),
  date_cache     Decimal(10,4),
  type_info      Decimal(10,4),
  version        Decimal(10,4)
)
ENGINE JDBC('ora','mac','ora_cfc');

在oracle表中

create table mac.ora_cfc
(
  sign_date      date not null,
  sign_number    varchar2(256) not null,
  doc_num        varchar2(256) not null,
  datecalc_cache number not null,
  date_cache     number not null,
  type_info      number not null,
  version        number not null
);

复制通过在 clickhouse 中进行调用

insert into mac.ora_cfc(sign_date,sign_number,doc_num,datecalc_cache,date_cache,type_info,version)
                select sign_date,sign_number,doc_num,datecalc_cache,date_cache,type_info,version 
                  from mac.ch_cfc_str

20-30 秒后复制完成,在 oracle 表中我看到 3132400 行

select sum(1) from mac.ora_cfc;

这很奇怪,我确定我是这个表的单一用户。 有时复制冻结或不开始,有时复制部分行。

有时会出现错误:

ORA-01400: cannot insert NULL into ("mac"."ora_cfc"."DOC_NUM")
ORA-01461: can bind a LONG value only for insert into a LONG column
HTTP status code: 500 Internal Server Error, body: Invalid LEB128 sequence.
HTTP status code: 500 Internal Server Error, body: index: 173050309, length: 136620051 

我知道如果我删除两个字符串字段然后复制成功或者当我只保留字符串列时。

请帮忙。

oracle-database clickhouse
1个回答
0
投票

DOC_NUM 被定义为非空,因此出现错误 ORA-01400: 无法将 NULL 插入 ("mac"."ora_cfc"."DOC_NUM")

ORA-01461:只能绑定 LONG 值以插入 LONG 列,当您尝试将 LONG 数据类型值插入或更新到未定义为 LONG 的列时发生

源中的版本字段是十进制,Oracle 中的版本字段是数字。

检查源上的任何小数字段是否为空,并且您尝试插入不为空的 Oracle 数字字段

© www.soinside.com 2019 - 2024. All rights reserved.