开发者社区> 问答> 正文

DDL 解析异常(JSON、GENERATED)

我遇到一个问题:

MemoryTableMeta过程中,遭遇了parse faield,表用了JSON类型、GENERATED计算列; 希望能通过解析,或者有其他自动跳过的方式吗? 我尝试了忽略ddl,但是看起来还是需要先通过表结构解析缓存的。

canal版本:1.1.2 表结构如下:

CREATE TABLE table01 ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', for_type tinyint(4) unsigned NOT NULL DEFAULT '1' COMMENT '', for_id bigint(20) NOT NULL DEFAULT '0' COMMENT '', index_date int(10) NOT NULL DEFAULT '0' COMMENT '', index_minute int(4) unsigned zerofill NOT NULL DEFAULT '0000' COMMENT '', detail json NOT NULL COMMENT '统计信息 ', created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, sum_order int(11) GENERATED ALWAYS AS (json_extract(detail, '$.sum_total')) VIRTUAL, finish_order int(11) GENERATED ALWAYS AS (json_extract(detail, '$.sum_finished')) VIRTUAL, rate_timeliness int(11) GENERATED ALWAYS AS (json_extract(detail, '$.rate_timeliness')) VIRTUAL, unfinish_order int(11) GENERATED ALWAYS AS (json_extract(detail, '$.sum_unfinished')) VIRTUAL, count_is_timeliness int(11) GENERATED ALWAYS AS (json_extract(detail, '$.count_is_timeliness')) VIRTUAL COMMENT '', count_total int(11) GENERATED ALWAYS AS (json_extract(detail, '$.count_total')) VIRTUAL COMMENT '', cancel_order int(11) NOT NULL DEFAULT '0' COMMENT '', sum_wait_grap int(11) GENERATED ALWAYS AS (json_extract(detail, '$.sum_wait_grap')) VIRTUAL, sum_wait_distributing int(11) GENERATED ALWAYS AS (json_extract(detail, '$.sum_wait_distributing')) VIRTUAL, PRIMARY KEY (id), KEY day_minute (index_date, index_minute), KEY type_id (for_type, for_id), KEY for_time_id (for_id, index_date, index_minute) ) ENGINE = InnoDB AUTO_INCREMENT = 1147683045 DEFAULT CHARSET = utf8 COMMENT = '实时指标'

原提问者GitHub用户BigChaoChao

展开
收起
云上静思 2023-05-04 13:10:07 103 0
2 条回答
写回答
取消 提交回答
  • 可以filter里忽略这张表

    原回答者GitHub用户agapple

    2023-05-05 10:42:44
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    Canal 在解析表结构时,需要根据 MySQL 数据类型来进行解析。对于 JSON 类型和 GENERATED 计算列,Canal 目前支持的解析能力有限,可能会出现解析失败的情况。

    对于这种情况,建议使用 Canal 的 filter 插件进行数据过滤和转换,通过编写自定义的 Filter 实现对数据的解析和转换,使得数据能够被正确地发送到下游。具体来说,可以在 Filter 中使用 JSON 函数解析 JSON 类型的数据,并将 GENERATED 计算列的值计算出来。

    需要注意的是,在使用 filter 插件时,可能需要对解析出的数据进行合并,使得每个数据记录中包含所有需要的数据,从而方便后续处理。同时,在使用 filter 插件时,也需要注意性能问题,避免因为数据量过大导致处理速度变慢。

    2023-05-04 17:58:41
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像