如何通过Informatica Cloud与Unix Shell脚本实现分组列值合并?
刚好做过类似的分组合并字段需求,给你分享两种靠谱的实现方式,分别对应Informatica Cloud和Unix Shell脚本:
方法一:使用Informatica Cloud实现
核心是用Aggregator组件完成分组拼接,步骤如下:
- 第一步:通过Source Qualifier读取原始数据,务必在Source Qualifier的SQL里加上
ORDER BY deptno,确保同部门的数据连续排列(这是分组拼接的前提)。 - 第二步:添加Aggregator Transformation组件,连接到Source Qualifier:
- 在Group By区域选中
deptno,按部门分组。 - 创建一个输出端口(比如命名为
formatted_ename),使用表达式实现拼接并添加引号:
注:'"' || STRING_AGG(ename, ',') || '"'STRING_AGG是Informatica Cloud支持的聚合函数,专门用于分组拼接字符串,会自动把同组的ename用逗号连接起来;前后的'"'是为了给拼接后的字符串加上双引号。
- 在Group By区域选中
- 第三步:把Aggregator的输出连接到Target组件,选择目标存储(表或文件),映射
deptno和formatted_ename两个字段即可。
方法二:使用Unix Shell脚本实现
用awk命令就能高效处理文本分组拼接,脚本如下(假设原始数据存在input.txt文件中):
awk ' BEGIN { FS=" " # 定义字段分隔符为空格(如果是制表符就改成FS="\t") print "deptno ename" # 输出表头 } NR > 1 { # 跳过原始数据的第一行表头 # 如果当前部门和上一个部门不同,输出上一个部门的结果 if ($1 != prev_dept) { if (prev_dept != "") { printf "%s \"%s\"\n", prev_dept, ename_list } prev_dept = $1 ename_list = $2 } else { # 同一部门,追加ename到列表 ename_list = ename_list "," $2 } } END { # 处理最后一个部门的结果 printf "%s \"%s\"\n", prev_dept, ename_list } ' input.txt > output.txt
脚本说明:
- 如果原始数据没有按
deptno排序,需要先排序再处理,修改命令为:sort -k1,1 input.txt | awk '...' > output.txt FS字段分隔符根据实际数据调整,如果是制表符分隔就改成FS="\t"。- 执行后结果会写入
output.txt,格式完全符合你的需求。
内容的提问来源于stack exchange,提问作者sambit parida
相关产品推荐
相关产品推荐

