JDBC catalog 类型转换问题记录请记录在这个帖下

大家可以把jdbc catalog类型转换遇到的问题记录在这里,有些类型我们没有支持,之后会根据问题记录做统一的支持。

1、pg原始表结构
CREATE TABLE public.t_test (
column1 bool NULL,
column2 int2 NULL,
column3 int2 NULL,
column4 int4 NULL,
column5 int4 NULL,
column6 int8 NULL,
column7 int8 NULL,
column8 numeric NULL,
column9 numeric NULL,
column10 float4 NULL,
column11 float4 NULL,
column12 float8 NULL,
column13 uuid NULL,
column14 point NULL,
column15 bit(1) NULL,
column16 bpchar(1) NULL,
column17 varchar NULL,
column18 text NULL,
column19 timestamp NULL,
column20 date NULL,
column21 time NULL,
column22 circle NULL,
column23 macaddr NULL,
column24 numeric(11, 4) NULL,
column25 money NULL
);

2、通过catalog查询后,映射成sr的表结构如下:

show create table jdbc_pg_ljm.public.t_test;

CREATE TABLE t_test (
column1 binary(1048576) DEFAULT NULL,
column2 smallint(6) DEFAULT NULL,
column3 smallint(6) DEFAULT NULL,
column4 int(11) DEFAULT NULL,
column5 int(11) DEFAULT NULL,
column6 bigint(20) DEFAULT NULL,
column7 bigint(20) DEFAULT NULL,
column8 varchar(1048576) DEFAULT NULL,
column9 varchar(1048576) DEFAULT NULL,
column10 float DEFAULT NULL,
column11 float DEFAULT NULL,
column12 doubledecimal DEFAULT NULL,
column13 binary(1048576) DEFAULT NULL,
column14 binary(1048576) DEFAULT NULL,
column15 binary(1048576) DEFAULT NULL,
column16 varchar(1048576) DEFAULT NULL,
column17 varchar(1048576) DEFAULT NULL,
column18 varchar(1048576) DEFAULT NULL,
column19 datetime DEFAULT NULL,
column20 datetime DEFAULT NULL,
column21 binary(1048576) DEFAULT NULL,
column22 binary(1048576) DEFAULT NULL,
column23 binary(1048576) DEFAULT NULL,
column24 decimal DEFAULT NULL,
column25 doubledecimal DEFAULT NULL
)

3、查询sr3的表
3.1、查询失败
select column1,column2,column26 from jdbc_pg_ljm.public.t_test where column1=1
提示错误如下:
SQL 错误 [1064] [42000]: open JDBCScanner failed, error: org.postgresql.util.PSQLException: ERROR: operator does not exist: bit = integer
Hint: No operator matches the given name and argument types. You might need to add explicit type casts.
Position: 84[org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2675), org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2365), org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:355), org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:490), org.postgresql.jdbc.PgStatement.execute(PgStatement.java:408), org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:166), org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:118), com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52), com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java), com.starrocks.jdbcbridge.JDBCScanner.open(JDBCScanner.java:68)]

3.2、查询成功
select column1,column2,column26 from jdbc_pg_ljm.public.t_test where column1=ture
查询成功。
4、通过过滤布尔类型时候,发现布尔类型查询格式都不一样
如 mssqlservery 是 select column1,column2,column26 from pgt_test where column11=1
pg 是select column1,column2,column26 from jdbc_pg_ljm.public.t_test where column11=ture

外表和catalog的表对应布尔类型 是否能统一。

mysql的 外表bigint(20) unsigned 不支持

oracle 外表的 timestampe和time 不支持

Mysql的tinyint(1)、time、int(22)不支持,此外由于MySQL和StarRocks的VARCHAR()长度不一样,部分varchar字段会超出长度限制导致查询错误

Datatype of external table column [total_money] is not supported!.
其中,total_money的数据类型是mysql的blob类型