It seems MaterializeMySQL doesn't support Decimal data type when doing replication.
event = std::make_shared<XIDEvent>(std::move(event_header));
                event->parseEvent(event_payload);
                position.update(event);
                break;
            }
            case TABLE_MAP_EVENT:
            {
                event = std::make_shared<TableMapEvent>(std::move(event_header));
                event->parseEvent(event_payload);
                table_map = std::static_pointer_cast<TableMapEvent>(event);
                break;
            }
            case WRITE_ROWS_EVENT_V1:
            case WRITE_ROWS_EVENT_V2:
            {
                if (do_replicate())
                    event = std::make_shared<WriteRowsEvent>(table_map, std::move(event_header));
                else
                    event = std::make_shared<DryRunEvent>(std::move(event_header));
                event->parseEvent(event_payload);
                break;
            }
            case DELETE_ROWS_EVENT_V1:
            case DELETE_ROWS_EVENT_V2:
            {
                if (do_replicate())
                    event = std::make_shared<DeleteRowsEvent>(table_map, std::move(event_header));
                else
                    event = std::make_shared<DryRunEvent>(std::move(event_header));
                event->parseEvent(event_payload);