如何在Talend Studio中将CSV地址拆分至数据库多列?
Talend Studio 单列地址拆分入库实现步骤
一、组件选型与流程搭建
拖拽以下组件到工作区并按顺序连接:
tFileInputDelimited:读取CSV格式的地址数据tMap:核心处理组件,实现单列地址的结构化拆分tDBOutput:将拆分后的标准化数据写入目标数据库表
二、各组件配置细节
1. tFileInputDelimited 配置
- 文件路径:选择存储60条地址数据的CSV文件
- 字段设置:列数设为1,列名命名为
raw_address(无需设置分隔符,确保整行地址被作为单个字段读取) - 编码:根据文件实际编码选择(如UTF-8)
2. tMap 拆分逻辑配置
在tMap中建立输入字段raw_address到输出字段的映射,通过字符串拆分与数组操作完成地址解析:
首先将原始地址拆分为字符串数组:
String[] addrArray = row1.raw_address.split(" ");
针对每个输出字段编写解析表达式:
- 街道号:
addrArray[0] - 单元号:判断第二个元素是否为数字(单元号典型特征),符合则取值,否则为空:
java.util.regex.Pattern.matches("\\d+", addrArray[1]) ? addrArray[1] : "" - 街道名称:根据是否存在单元号,截取对应区间的数组元素并拼接:
int startIdx = java.util.regex.Pattern.matches("\\d+", addrArray[1]) ? 2 : 1; int offset = java.util.regex.Pattern.matches("\\d+", addrArray[1]) ? (addrArray.length >=9 ? 6 :5) : (addrArray.length >=8 ?5 :4); String.join(" ", java.util.Arrays.copyOfRange(addrArray, startIdx, addrArray.length - offset)) - 街道类型:取地址结构中对应位置的元素(如示例中的
DR),兼容无方位词的情况:addrArray.length >= (java.util.regex.Pattern.matches("\\d+", addrArray[1]) ?9 :8) ? addrArray[addrArray.length - (java.util.regex.Pattern.matches("\\d+", addrArray[1]) ?6 :5)] : "" - 街道方位:处理部分地址无方位词的场景,存在则取值,否则为空:
addrArray.length >= (java.util.regex.Pattern.matches("\\d+", addrArray[1]) ?10 :9) ? addrArray[addrArray.length - (java.util.regex.Pattern.matches("\\d+", addrArray[1]) ?5 :4)] : "" - 城市:因城市统一,直接写入固定值(如
OAKVILLE) - 省份:因省份统一,直接写入固定值(如
ON) - 邮政编码:拼接地址末尾的两个元素(如示例中的
L6J 7Y8):addrArray[addrArray.length -2] + " " + addrArray[addrArray.length -1]
3. tDBOutput 配置
- 数据库连接:选择已配置完成的目标数据库连接(如MySQL、Oracle等)
- 目标表:填写要写入的数据库表名,若表未创建,可勾选"Create table"自动生成匹配的表结构
- 字段映射:将
tMap输出的8个字段与数据库表字段一一对应
三、测试与验证
- 先选取1-2条包含特殊情况(无单元号、无方位词)的地址进行测试运行,检查拆分结果是否符合预期
- 调整表达式逻辑适配所有地址格式后,运行完整60条数据的任务
内容的提问来源于stack exchange,提问作者Sushant Schwann
相关产品推荐
相关产品推荐

