资讯动态

SeaTunnel FieldMapper 字段映射转换插件详解:重命名、排序与裁剪字段

发布时间:2026/9/20 2:50:42 来源:尧图企业网站定制
数据集成ETL大数据批处理流处理变更数据捕获【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址https://gitcode.com/GitHub_Trending/se/seatunnel点击查看免费下载本文基于 SeaTunnel 开源仓库的FieldMapper转换插件系统讲解如何通过field_mapper配置在输入表与输出表之间建立字段映射关系实现字段重命名、字段顺序调整与字段裁剪。读完本文你将能够在 SeaTunnel 作业配置中熟练使用FieldMapper并理解其在 Catalog 表结构、主键与约束键层面的底层实现机制。概述FieldMapper 能做什么FieldMapper字段映射是 SeaTunnel 转换Transform体系中的一类字段级转换插件其核心作用是为输入模式input schema与输出模式output schema之间添加字段映射。它的典型能力包括字段重命名将输入字段name映射为输出字段new_name字段顺序调整按映射定义顺序重新排列输出表的字段顺序字段裁剪删除凡是不出现在field_mapper映射中的输入字段将不会出现在输出表中。插件在源码中的注册名为FieldMapper对应实现类位于 FieldMapperTransform.java其PLUGIN_NAME常量即定义为FieldMapper见该文件第 47 行。属性配置FieldMapper转换插件的核心配置项如下名称类型是否必须默认值field_mapperObject是-配置项在源码中由 FieldMapperTransformConfig.java 定义public static final OptionMapString, String FIELD_MAPPER Options.key(field_mapper) .mapType() .noDefaultValue() .withDescription( Specify the field mapping relationship between input and output);field_mapper [config]field_mapper用于指定输入与输出之间的字段映射关系类型为MapString, String必须配置且不能为空。其语义为key输入表源表中的字段名value输出表目标表中的字段名顺序映射条目书写的顺序即输出表中字段的排列顺序。源码中字段映射保存在LinkedHashMap中见 FieldMapperTransformConfig.java 第 41 行这保证了配置书写顺序与输出字段顺序严格一致。如果某个 key 在输入表中不存在作业会直接抛出异常。从源码看FieldMapperTransform构造函数与transformTableSchema方法中均会对映射 key 做存在性校验找不到输入字段时抛出TransformCommonError.cannotFindInputFieldError(...)见 FieldMapperTransform.java 第 57-71 行、第 104-109 行。common options [config]FieldMapper同样支持所有转换插件共享的编排参数包括参数含义默认行为plugin_input声明当前 Transform 消费的上游数据集省略时默认读取配置顺序中的前一个插件输出plugin_output将当前 Transform 结果注册为命名数据集供后续 Transform 或 Sink 引用注意旧参数名source_table_name与result_table_name已废弃新配置请统一使用plugin_input与plugin_output。详细说明见 Transform 通用参数文档。完整示例重命名、排序与裁剪假设源端数据读取到的表结构及数据如下idnameagecard1Joy Ding201232May Ding201233Kin Dom201234Joy Dom20123我们想要完成三件事删除age字段调整字段顺序为id、card、name将name重命名为new_name。在作业配置中添加FieldMapper转换即可实现transform { FieldMapper { plugin_input fake plugin_output fake1 field_mapper { id id card card name new_name } } }执行转换后结果表fake1中的数据将变为idcardnew_name1123Joy Ding2123May Ding3123Kin Dom4123Joy Dom注意age字段未出现在field_mapper中因此在输出表中被自动裁剪card与name的书写顺序决定了输出表id、card、new_name的字段排列顺序。源码实现原理FieldMapper的核心处理逻辑由 FieldMapperTransform.java 完成它继承自AbstractCatalogSupportMapTransform同时重写了行数据转换与表结构转换两部分。行数据转换transformRowOverride protected SeaTunnelRow transformRow(SeaTunnelRow inputRow) { MapString, String fieldMapper config.getFieldMapper(); Object[] outputDataArray new Object[fieldMapper.size()]; for (int i 0; i outputDataArray.length; i) { outputDataArray[i] inputRow.getField(needReaderColIndex.get(i)); } SeaTunnelRow outputRow new SeaTunnelRow(outputDataArray); outputRow.setRowKind(inputRow.getRowKind()); outputRow.setTableId(inputRow.getTableId()); outputRow.setOptions(inputRow.getOptions()); return outputRow; }可见逐行转换时插件按照预先计算好的源字段索引needReaderColIndex从输入行取值组装成新的输出行并且会保留原行的RowKind增删改标识、TableId与Options等元信息保证行级语义在 CDC 等场景下不丢失。表结构转换transformTableSchemaPhysicalColumn outputColumn PhysicalColumn.of( value, oldColumn.getDataType(), oldColumn.getColumnLength(), oldColumn.getScale(), oldColumn.isNullable(), oldColumn.getDefaultValue(), oldColumn.getComment(), oldColumn.getSourceType(), oldColumn.getOptions());输出列的构建是“换名不换型”新列只替换字段名映射 value而数据类型、长度、精度、可空性、默认值、注释、源类型等元数据全部继承自原输入列因此FieldMapper不会改变字段的数据类型只会改变字段名、顺序与数量。主键与约束键的保留FieldMapper在重建输出表结构时会同步处理主键PrimaryKey与约束键ConstraintKey若输入表存在主键且主键涉及的列全部包含在映射 key 中则输出表会生成映射后的新主键主键列名替换为映射后的字段名同理约束键如唯一键若其列全部在映射范围内也会被保留并替换为新字段名。这一行为可以通过单元测试验证FieldMapperTransformTest.java 中构造了主键(key1, key2)与唯一约束(key1, key3)的输入表在将key1 - k1、key2 - key2、key3 - key3、key4 - k4映射后断言输出表字段数为 4字段名依次为k1, key2, key3, k4新主键列名被替换为(k1, key2)唯一约束列名被替换为(k1, key3)。工厂类与配置校验FieldMapper通过 FieldMapperTransformFactory.java 注册到 SeaTunnel 的插件体系中其factoryIdentifier()返回FieldMapper与配置中的插件名一致。工厂类定义的OptionRule约束如下必填field_mapper且附加Conditions.mapNotEmpty(...)条件即映射不能为空可选table_transform多表转换配置、table_match_regex表路径匹配正则、rule_match_mode规则匹配模式。校验逻辑有对应测试覆盖FieldMapperTransformFactoryTest.java 验证了三种场景配置了非空field_mapper时校验通过完全缺失field_mapper时抛出OptionValidationExceptionfield_mapper为空 Map 时同样抛出OptionValidationException。这意味着在作业提交阶段缺少映射或映射为空的FieldMapper配置会直接报错而不是等到运行时才发现。多表Multi Catalog转换支持FieldMapper还提供了多表场景下的实现 FieldMapperMultiCatalogTransform.java。当作业包含多张 Catalog 表时插件会为每张输入表构建独立的FieldMapperTransform实例对于不满足匹配规则的输入表则使用IdentityMapTransform恒等转换原样透传。与之配合的通用参数定义在 TransformCommonOptions.java参数类型默认值说明table_transformList空列表多表转换配置table_match_regexString.*匹配表路径的正则表达式默认匹配所有表rule_match_modeEnumFIRST_MATCH规则匹配模式可选FIRST_MATCH/ALL_MATCHMULTI_TABLES选项的 key 为table_transform注意与单表场景下的field_mapper区分多表场景可针对不同的表路径分别指定映射规则。使用建议映射键必须真实存在field_mapper中的 key 必须是输入表真实存在的字段否则作业会抛出cannot find field类异常利用顺序特性field_mapper的书写顺序即输出表字段顺序可同时完成排序与裁剪减少额外 SQL 转换的依赖注意数据类型继承FieldMapper只做字段名/顺序/数量的映射不改动数据类型如需类型转换应配合Copy、Sql等其他转换插件使用多表场景显式命名当 pipeline 中存在分支或多表时优先使用plugin_input/plugin_output显式声明数据集提升可读性与可维护性。更新日志新版本添加了复制转换连接器Copy Transform等相关能力FieldMapper作为基础字段映射插件持续演进详情可参考 Transforms 文档目录。赞分享数据集成ETL大数据批处理流处理变更数据捕获【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址https://gitcode.com/GitHub_Trending/se/seatunnel点击查看免费下载相关推荐SeaTunnel FieldMapper Transform 插件详解字段映射、重命名与顺序调整实战指南SeaTunnel FieldMapper Transform 插件详解字段映射、重命名与顺序调整实战指南 导读 FieldMapper 是 SeaTunne数据集成ETL大数据批处理流处理变更数据捕获SeaTunnel FieldRename 字段重命名转换插件完全指南批量统一字段命名的最佳实践SeaTunnel FieldRename 字段重命名转换插件完全指南批量统一字段命名的最佳实践 FieldRename 是 SeaTunnel 内置的字段重数据集成ETL大数据批处理流处理变更数据捕获Cangjie-SIG/fountain字段别名FieldAlias命名映射Cangjie SIG/fountain字段别名FieldAlias命名映射 痛点数据映射的命名困境 在服务器应用开发中我们经常面临这样的困境后端数据模后端Web框架创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价