我遇到一个问题:
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
Canal 在解析表结构时,需要根据 MySQL 数据类型来进行解析。对于 JSON 类型和 GENERATED 计算列,Canal 目前支持的解析能力有限,可能会出现解析失败的情况。
对于这种情况,建议使用 Canal 的 filter 插件进行数据过滤和转换,通过编写自定义的 Filter 实现对数据的解析和转换,使得数据能够被正确地发送到下游。具体来说,可以在 Filter 中使用 JSON 函数解析 JSON 类型的数据,并将 GENERATED 计算列的值计算出来。
需要注意的是,在使用 filter 插件时,可能需要对解析出的数据进行合并,使得每个数据记录中包含所有需要的数据,从而方便后续处理。同时,在使用 filter 插件时,也需要注意性能问题,避免因为数据量过大导致处理速度变慢。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。