FlinkCDC监控Oracle时json返回值异常(float,numeric)

问题描述

`用flinkcdc 监控Oracle时如果Oracle字段类型是float,numeric,字段的值就显示异常,如下面所示

Oracle数据:COLUMN2值为123,字段类型为float

flinkcdc返回的值为"COLUMN2":{“scale”:0,“value”:“ew==”}

{“before”:{“NAME”:“1”,“AGE”:“12”,“CITY”:“ww”,“SEX”:“65”,“DCCDATE”:null,“COLUMN2”:{“scale”:0,“value”:“ew==”},“COLUMN3”:0.0,“COLUMN4”:0.0},“after”:{“NAME”:“1”,“AGE”:“12”,“CITY”:“ww”,“SEX”:“12”,“DCCDATE”:null,“COLUMN2”:{“scale”:0,“value”:“ew==”},“COLUMN3”:0.0,“COLUMN4”:0.0},“source”:{}}

我们希望返回的值为"COLUMN2":“123.0”


解决方案:

Properties properties = new Properties();
//加以下配置生效
properties.setProperty(“decimal.handling.mode”,“double”);
StreamExecutionEnvironment bsEnv = StreamExecutionEnvironment.getExecutionEnvironment();
bsEnv.setRuntimeMode(RuntimeExecutionMode.STREAMING);

    Map<String, Object> customConverterConfigs = new HashMap<>();
    customConverterConfigs.put(JsonConverterConfig.DECIMAL_FORMAT_CONFIG, "numeric");
    SourceFunction<String> sourceFunction = OracleSource.<String>builder()
            .hostname(host)
            .port(1521)
            .database(db)
            .schemaList(schema)
            .tableList(table)
            .username(user)
            .password(pw)
            .startupOptions(StartupOptions.latest())
            **.debeziumProperties(properties)**
            .deserializer(new JsonDebeziumDeserializationSchema()
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐