开发者社区> 问答> 正文

开启druid.ddl=true以及使用tsdb,会出现改表结构一直报column size is

最近碰上一个问题,因为druid在解析我们的表结构的时候总是报错,无法通过。所以关掉了druid的ddl以及canal query ddl的识别。如果此时更新了业务表的列,例如增加列。在新的event来的时候,会发生,event里的fields数量多,而tableMeta里的列数少,而抛出异常。

` public TableMeta getTableMeta(String schema, String table, boolean useCache, EntryPosition position) { TableMeta tableMeta = null; if (tableMetaTSDB != null) { //TODO 觉得此处应该加上useCache判断,如果使用了cache,从缓存走。如果不使用cache,就走数据库直连查询 tableMeta = tableMetaTSDB.find(schema, table); if (tableMeta == null) { // 因为条件变化,可能第一次的tableMeta没取到,需要从db获取一次,并记录到snapshot中 String fullName = getFullName(schema, table); try { ResultSetPacket packet = connection.query("show create table " + fullName); String createDDL = null; if (packet.getFieldValues().size() > 0) { createDDL = packet.getFieldValues().get(1); } // 强制覆盖掉内存值 tableMetaTSDB.apply(position, schema, createDDL, "first"); tableMeta = tableMetaTSDB.find(schema, table); } catch (IOException e) { throw new CanalParseException("fetch failed by table meta:" + fullName, e); } } return tableMeta; } else { if (!useCache) { tableMetaDB.invalidate(getFullName(schema, table)); }

    return tableMetaDB.getUnchecked(getFullName(schema, table));
}

}`

原提问者GitHub用户wzh3839188

展开
收起
绿子直子 2023-05-09 10:36:01 104 0
1 条回答
写回答
取消 提交回答
  • 你关掉了tsdb,就没法解决这个列不匹配的问题。如果针对DDL无法解析,建议反馈对应的DDL,推动TSDB的完善

    原回答者GitHub用户agapple

    2023-05-10 10:01:02
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载