应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

DataX源码分析十之Transformer源码分析

  在DataX中,还有一个比较核心的组件,就是Transformer。本章我们将着重分析Transformer。
  继上一篇文章:DataX源码分析九至Task初始化为啥需要Transformer
  简单的ETL模型视图在上一节中。我们说到Transformer在ETL链路里面,就是数据转换的角色。比如,我们常见的账号、密码脱敏等等。比如,我们需要对ext字段的内容解析,然后,才决定是否需要此条Record。
  代码初次入口
  在这段代码中,完成了自定义Transformer的加载、初始化等等。
  代码入口:com。alibaba。datax。core。taskgroup。TaskGroupContainer。TaskExecutorTaskExecutor。加载定义的内置的TransformerTransformerUtil。buildTransformerInfo(taskConfig);
  DataX内置Transformer
  在DataX中,transformer有两处来源,一个是内置的。一个是自己实现的。如果是自己实现的话,套路还是类似插件的那种,通过transformer。json来加载的;具体请看下一小节。那么内置的有哪些呢?
  代码入口:comalibabadataxcoretransporttransformerTransformerRegistry下面的transformer,看具体业务使用的场景而决定。static{registTransformer(newSubstrTransformer());registTransformer(newPadTransformer());registTransformer(newReplaceTransformer());registTransformer(newFilterTransformer());registTransformer(newGroovyTransformer());}DataXTransformer分类Simple类型的TransformerpublicabstractclassTransformer{paramrecord行记录,UDF进行record的处理后,更新相应的recordparamparastransformer函数参数abstractpublicRecordevaluate(Recordrecord,Object。。。paras);}Proxy类型的Transformer这个其实就是一个Proxy,publicabstractclassComplexTransformer{paramrecord行记录,UDF进行record的处理后,更新相应的recordparamtContexttransformer运行的配置项paramparastransformer函数参数abstractpublicRecordevaluate(Recordrecord,MapString,ObjecttContext,Object。。。paras);}
  通过代码分析,两者都没有啥大的区别。ComplexTransformer通过ComplexTransformerProxy最终实现transformer调用。复杂的Transformer中的tContext是为了多传一些参数罢了。
  DataX自定义Transformer加载初始化第一步:JOBTRANSFORMERtransformerListConfigurationtfConfigstaskConfig。getListConfiguration(CoreConstant。JOBTRANSFORMER);第二步:校验dxgroovy是否只调用了一次functionName。equals(dxgroovy)functionNames。contains(dxgroovy)第三步:获取到每个transformer的组件的名称TransformerRegistry。loadTransformerFromLocalStorage(functionNames);第四步:读取指定transformer的路径CoreConstant。DATAXSTORAGETRANSFORMERHOMEG:datax0。24dataxlocalstoragetransformerStringtransformerPathCoreConstant。DATAXSTORAGETRANSFORMERHOMEFile。separatoreach;第五步:读取指定的transformer的配置Configuration。from(newFile(transformerPathFile。separatortransformer。json));第六步:通过transformer。json读取ClassNameStringclassNametransformerConfiguration。getString(class);第七步:通过反射初始化transformerClasslt;?transformerClassjarLoader。loadClass(className);第八步:注册transformer。registedTransformer。putTransformer转换将反射生成的Transformer再次打包。方便调用privatestaticTransformerInfobuildTransformerInfo(ComplexTransformercomplexTransformer,booleanisNative,ClassLoaderclassLoader){TransformerInfotransformerInfonewTransformerInfo();transformerInfo。setClassLoader(classLoader);transformerInfo。setIsNative(isNative);transformerInfo。setTransformer(complexTransformer);returntransformerInfo;}
  Transformer封装,统一转换为Complex类型的Transformer大家有没有发现,即使你是Simple类型的Transformer,也会给你转换成Proxy类型的Transformer。有点意思〔无辜笑〕Transformer参数信息保存IntegercolumnIndexconfiguration。getInt(CoreConstant。TRANSFORMERPARAMETERCOLUMNINDEX);transformerExecutionParas。setColumnIndex(columnIndex);ListStringparasconfiguration。getList(CoreConstant。TRANSFORMERPARAMETERPARAS,String。class);if(paras!nullparas。size()0){transformerExecutionParas。setParas(paras。toArray(newString〔0〕));}其实这块没必要搞这么复杂。比如,我这边的宽表系统,按照约定,直接丢一个Record到业务方的代码里面。业务方喜欢怎么解析都可以。
  总结通过分析自定义Transformer的加载过程中。我们有一次认识到了transformer。json类似这种文件的作用了。如果你自己开发一套插件系统的话,你可以把xx。json放在Resource目录下。这种,整体的结构会更加简单。Transformer的定制化开发,你可以按照自己的开发插件。如通过DataX内部来加载插件方式或者直接在里面改动DataX代码来集成。但是,我不推荐直接改代码的方式。还是得要解耦。
  关于我
  前去哪儿网技术专家!混迹中间件职场8年!分享各种Java中间件知识!

潍坊青州跑出发展加速度,冲刺首季开门红2月14日一大早,在潍坊雷腾动力机械有限公司的生产车间里,2条生产线全部启动,70多名工人正在生产一批来自巴西的订单产品,这是潍坊青州何官镇工业企业全力以赴冲刺开门红的一个缩影……菌类含有的这种维生素,大多数人都缺!我们知道,长期只吃肉食会增加三高风险,尤其是高脂肪、高胆固醇、高热量的红肉;而光吃素,蛋白质摄入不足,同样不利健康。所以,合理的膳食结构离不开六个字一荤一素一菇,食物多样……良心韩援,真正的世一上!无敌的六边形战士,RNG最C的上单说到当前的强力上单,我相信大家会谈论到marin、TheShy,宙斯等等,这几位选手确实是带来最震撼的视觉冲击和精彩的操作让粉丝们过足了眼瘾,但是今天咱们聊的并不是这几位,而是……才拾新能源又碰ChatGPT,浮躁的昆仑万维已失成长性业务编辑虞尔湖出品潮起网于见专栏近日,昆仑万维高调宣布和奇点智源合作,将在今年内发布中国版ChatGPT开源代码。此消息一出,昆仑万维股价小涨一波,在2月16日一度跃至……雍和宫,为什么这么火?雍和宫不输故宫的文化图腾无论是游客信众还是北京居民都经常拜访的圣地蕴含着300多年的历史文化建筑之美祈福烧香观展游览北京著名的景点……北京整车无人自动驾驶车辆上路测试日前,北京市首批整车无人自动驾驶车辆获准在北京经开区的限定路线和特定时段分批开展道路测试。这两天,在北京经开区出现了一批整车无人自动驾驶车辆,区别于此前开展的主驾无人车辆……女人这样对待你,其实就是喜欢你,别不懂文森屿鹿林感情里,被一个人用心对待,是非常难得的事情。她喜欢你,爱上了你,在对待你的时候,自会比其他人热情许多,让你感受到她的用心。或许,在遇见她之前,你从未……元宵节海报文案合集,提前供大家参考!华灯照团圆,共渡幸福年。元宵节海报灵感合集,已经提前为大家备好了,转给有需要的你:家居家电行业三雄极光照明:以灯祈福,每一刻皆盼团圆。小米手机:上元良宵,美美……新华全媒丨首届全球数字贸易博览会在杭州启幕12月11日,在首届全球数字贸易博览会现场,参观者在体验数字化教育服务。12月11日至14日,首届全球数字贸易博览会在浙江省杭州市举行。本届数贸会以数字贸易商通全球为主题……一天蒸发200亿美元市值,印度首富跌出全球富豪榜前三仅1月27日一天,印度首富阿达尼(GautamAdani)的个人资产就被抹去了至少200亿美元。这都缘起于一份报告。日前,美国做空机构兴登堡研究(HindenburgRe……珲春口岸迎来入境小高峰近日,珲春口岸迎来入境小高峰。作为吉林省唯一的对俄公路口岸,自珲春口岸恢复旅检通关后,随着人员往来的不断流动,住宿、餐饮、购物等各类服务业随之升温,增添了久违的热闹气氛。……iPhone改用C口板上钉钉,但可能会加一把锁iPhone要改用USBTypeC接口,这几乎已经是近年来每逢新款iPhone发布前都会出现的老话题,但直到2022年的iPhone14系列,依然还是用的Lightning接口……
MIUI14第三批稳定版发布,小米11系列提前用上,网友高人不知道从什么时候开始,网友习惯用低人一等、高人一等来形容厂商售后态度,例如有些手机发布后就没人理睬,厂商不愿意承担售后会遭到吐槽低人一等。而厂商积极承担售后义务,愿意为用户做良……天龙八部所有人都没想到,金庸武侠天龙八部最强高手排名,真的有答案了!一款名为天龙八部2的手游,在抖音悄然上线。成都太古里3D裸眼大屏,天降祥瑞金龙现世,让周边的路人惊叹不已。游戏一经上……语音识别人工智能关键技术,龙头强者恒强作为人工智能重要的分支,当前以语音识别、自然语言处理、语音合成为主要技术构成模块的语音交互技术已发展较为成熟。其中,语音是人与人间自然的交互方式,也是人机交互最重要的入口……有声考场作文梦想,给了我力量七(5)班谭峻熙梦想不是虚无缥缈的,梦想是一种信念,一种希望,一种力量,一种对未来美好生活的渴望,激励着我们努力拼搏。我的梦想是成为一名国家队篮球员。就你那三……来一场说走就走的旅行,福建泉州开元寺春耕时节,来一场说走就走的旅行,去想去的地方,进行一场心灵的洗礼,买了高铁票,直奔终点,车厢里的整洁车窗外的倒影,无一不在证明,我即将去向的地方,福建泉州市,开元寺……布鲁克斯自癌症治疗以来首次回到伯恩茅斯队对阵利物浦队大卫布鲁克斯在周六英超对阵利物浦的比赛中被任命为伯恩茅斯的替补,这是他自从从癌症治疗中恢复以来第一次出现在比赛日的阵容中。这位威尔士国脚自从2021年10月被诊断出二期霍……勒纳尔德尚对执教工作了如指掌,他所取得的成就令人惊叹直播吧4月1日讯接替科琳娜成为法国女足主帅后,勒纳尔接受了《队报》的采访,他称赞了法国男足主帅德尚。勒纳尔说道:我们已经和德尚交换了意见。我们和德尚进行了一些交流,他在国……憋屈的婚姻生活只有结婚生小孩之后,才知道婚姻生活对于女性是多么的可怕,多么的被动,尽管属于顺产,但是分娩的疼痛永生难忘,最无语的是,先生在我生产之后还与我争辩,那种反差强烈的让我产生极大的不……记一次购买rtl8812au网卡并在linuxkali上安装前段时间,因为业务需要破解wifi密码,所以购买了rtl8812au网卡,由于简单网上购买太慢,于是决定在闲鱼上碰碰运气,不出意外,我碰到打车前往20公里的卖家位置拿到网卡……恼人的坐骨神经痛,中医有何妙招搞定坐骨神经痛是指坐骨神经通路及其分布区内的疼痛,部位一般在臀部、大腿后侧、小腿后外侧和踝部等处,属内科急症范畴。既往强调散寒、除湿、祛风、通痹的较多,故治疗时间长,且复发率……敢仿造故宫的景区,8亿炸山,成5A级景区故宫又称紫禁城,是北京的一座宫殿建筑群。它周围环绕着众多华丽的皇家园林和寺庙,包括中山公园、祭祀太庙、北海公园和景山公园。紫禁城建于1406年至1420年,是从明朝(自永……守护成长之路,白城医高专白医幼儿行志愿服务队走进幼儿园为弘扬雷锋精神,践行奉献使命担当,近日,白城医学高等专科学校护理学院白医幼儿行志愿服务队走进白城市洮北区第二幼儿园和第十幼儿园,开展呵护朝阳公益活动。用善意传递力量,守护孩子们……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网