MongoDB聚合中将数组转为JSON字符串导出Parquet求助
MongoDB聚合导出Parquet时将动态数组转为JSON字符串
问题背景
原始MongoDB文档结构如下:
{ "id":"eafa3720-28e2-11ed-bf07", "type":"test", "serviceType_details": [ { "is_custom_service_type": false, "bill_amount": 100 } ] }
其中serviceType_details无固定Schema,通过聚合导出Parquet后,该字段被识别为数组,导致Athena表维护难度极高。需要将该字段序列化为JSON字符串导出,此前尝试$convert、$project操作未成功。
现有聚合管道框架:
db.test_collection.aggregate([ { $match: { "id": "something" } }, { $addFields: { ... }, }, { "$out" : { "format" : { "name" : "parquet", "maxFileSize" : "10GB", "maxRowGroupSize" : "100MB" } } } ])
解决方案
使用MongoDB的$toJson操作符,在$addFields阶段将serviceType_details字段转换为JSON字符串,直接覆盖原字段即可。修改后的完整聚合管道如下:
db.test_collection.aggregate([ { $match: { "id": "something" } }, { $addFields: { serviceType_details: { $toJson: "$serviceType_details" } } }, { "$out" : { "format" : { "name" : "parquet", "maxFileSize" : "10GB", "maxRowGroupSize" : "100MB" } } } ])
说明
$toJson会将任意BSON类型(包括复杂数组、嵌套文档)序列化为标准JSON字符串,完全适配serviceType_details的动态Schema场景。- 导出Parquet后,该字段会被识别为字符串类型,后续在Presto/Athena中可直接按字符串处理,无需维护复杂的嵌套表结构。
内容的提问来源于stack exchange,提问作者Gaurav Srivastava
相关产品推荐
相关产品推荐

