如何使用DataStage工具实现按公司分组的地点数据聚合转换
实现方法(DataStage 版本)
这个需求本质是按公司分组,聚合对应的城市列表,用DataStage的标准组件就能轻松搞定,步骤非常清晰:
1. 读取输入文件(Sequential File Stage)
首先用Sequential File组件读取你的源数据,重点要配置对分隔符:
- 记录分隔符:你的输入里用中文顿号
、分隔每条城市,公司记录,所以把Record Delimiter设为、;如果实际文件是每行一条记录,就用默认的换行符即可。 - 字段分隔符:每条记录里的城市和公司用逗号
,分隔,所以Field Delimiter设为,,这样会自动拆分出两个字段(比如GGN和IBM)。 - 记得在
Columns标签里给两个字段起清晰的名字,比如City(城市)和Company(公司),方便后续操作。
2. 清洗数据(Transformer Stage)
这一步是避坑关键:你的输入里有BNGLR, IBM(IBM前面带空格),这种空格会导致分组错误(IBM和 IBM会被当成不同公司)。所以在Transformer里:
- 给
Company字段用Trim(InLink.Company)去掉前后空格,输出新的Company字段。 - 同理,
City字段也可以用Trim(InLink.City)处理,确保没有多余空格干扰。
3. 排序分组(Sort Stage)
把清洗后的数据传到Sort组件,设置:
- 排序键:选择
Company字段,按升序/降序排序都行,核心是让同一个公司的所有记录排在一起。 - (可选去重)如果你的数据里有重复的
城市-公司组合(比如GGN,HCL出现两次),可以勾选Remove Duplicates,并把City也加入排序键,这样就能去重,避免后续聚合出重复的城市。
4. 聚合城市列表(Aggregator Stage)
这是核心步骤,用Aggregator组件按公司分组,合并城市:
- 分组键:选择
Company,这样所有同公司的记录会被分到一组。 - 聚合字段:新建一个输出字段,比如
City_List,用DataStage内置的Collect()函数:Collect(InLink.City, ',')。这个函数会把同组的所有City值用逗号拼接成一个字符串(比如GGN和BNGLR会变成GGN,BNGLR)。
5. 输出结果(Sequential File Stage)
最后用Sequential File组件输出结果,配置:
- 字段分隔符:设为逗号
,,这样输出的每条记录就是Company,City_List的格式,比如IBM,GGN,BNGLR、HCL,GGN,NOIDA,BNGLR。 - 记录分隔符用换行符,让每个公司占一行,完全匹配你的输出要求。
额外提示
- 如果你的输入文件编码有问题,记得在Sequential File的
Properties标签里设置正确的编码(比如UTF-8),避免乱码。 - 要是你用的是DataStage 8.x及以上版本,
Collect()函数是直接支持的;如果是更老的版本,可以用自定义聚合函数或者在Transformer里用变量拼接(不过还是Collect更省心)。
内容的提问来源于stack exchange,提问作者Abhishek choudhary
相关产品推荐
相关产品推荐

