StripeOAAlgorithmData Join
[Stripe] OA 真题解析
•
Stripe OA 真题分享
题目:Join Data Set
题目描述
在 Stripe 的支付系统中,需要将客户信息(Customer File)与支付处理器信息(Processor File)进行关联匹配。实现一个函数 joinDataSet(fieldName, customerFile, processorFile, skipUnmatched),将两个 CSV 格式的数据集按照指定字段进行连接(类似于 SQL 的 LEFT JOIN 或 INNER JOIN 操作)。
函数定义:
def joinDataSet(fieldName, customerFile, processorFile, skipUnmatched):
参数说明:
fieldName: 连接使用的字段名(如 customer_id),两个文件都包含此字段customerFile: 客户数据文件,每行是一个 CSV 记录,第一行是表头processorFile: 处理器/支付数据文件,每行是一个 CSV 记录,第一行是表头skipUnmatched: 布尔值,True 表示跳过找不到匹配的记录,False 表示填充空值
输入输出格式:
- 输入:两个 list,每个元素是一行 CSV 字符串(逗号分隔)
- 第一行是表头(列名)
- 输出:合并后的 CSV 数据,同样是 list 格式,第一行为合并后的表头
示例数据:
Customer File(客户表):
order,customer_id,first_name,last_name,address,city,state
1,1,John,Doe,1st street,New York, NY
2,2,Jane,Smith,2nd avenue,Los Angeles,CA
3,3,Peter,Jones,3rd street,Chicago,IL
Processor File(支付处理器表):
order,customer_id,cc_number,ccv,expiration,card_name
1,1,424242424242,123,02/2028,John Doe
1,2,1111222233334444,456,11/2026,Jane Smith
1,3,5555666677778888,789,05/2025,Peter Jones
期望输出:
order,customer_id,first_name,last_name,address,city,state,order,customer_id,cc_number,ccv,expiration,card_name
1,1,John,Doe,1st street,New York, NY,1,1,424242424242,123,02/2028,John Doe
2,2,Jane,Smith,2nd avenue,Los Angeles,CA,1,2,1111222233334444,456,11/2026,Jane Smith
3,3,Peter,Jones,3rd street,Chicago,IL,1,3,5555666677778888,789,05/2025,Peter Jones
关键要求:
- 结果表的表头是两个文件表头的拼接
- 每条记录按照 order 字段排序,数字类型的 order 值排在字符串类型之前
- 支持一对多连接:一个 customer 可以有多条 processor 记录(如多张信用卡)
- 当找不到匹配时,根据 skipUnmatched 参数决定是填充空值还是跳过
解题思路
- 解析表头:分别从两个文件中获取列名,找到连接字段和 order 字段的索引位置
- 解析数据行:将每行按逗号分割成列表
- 排序:按照 order 字段排序(数字在前,字符串在后)
- 建立映射:将 processor 数据按连接字段建立哈希映射
- 执行连接:遍历 customer 数据,在映射中查找匹配的 processor 记录
- 处理结果:
- 如果找到匹配:将 customer 和 processor 记录合并
- 如果未找到且 skipUnmatched=false:添加空的 processor 字段
- 如果未找到且 skipUnmatched=true:跳过该记录
关键点:
- 支持一对多连接:一个 customer 记录可以对应多条 processor 记录
- 结果按 order 字段排序,数字排在字符串前面
- 连接字段两侧的列名不同也能正确匹配
测试用例
根据题目描述,有以下4个测试场景:
- 基本连接(Case 1):所有 customer 都有对应的 processor,记录一一对应
- 部分缺失(Case 2):第三个 customer 没有对应的 processor,fill empty填充空值
- 一对多(Case 3):customer_id=1 对应两条 processor 记录(两条卡信息)
- 跳过不匹配(Case 4):设置 skipUnmatched=true,跳过无匹配的记录
总结
本题考察核心:
- CSV 数据解析:字符串分割和处理
- 哈希表映射:建立连接字段到记录的高效映射
- 排序逻辑:自定义排序(数字优先字符串)
- 连接操作:处理一对一、一对多、无匹配等多种边界情况
Stripe oa近期考题都差不多,有需要完整题目和全对代码的都可以联系~