You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amazon S3 JSON文件转NDJSON导入BigQuery问题咨询

S3存储JSON转换为BigQuery兼容NDJSON格式方案

核心处理逻辑

你需要将外层公共元字段edwLoadDate、edwRecordSource注入到data数组的每一条子记录中,再将每条处理后的子记录序列化为单行JSON,最终生成的每行独立的文件即为BigQuery支持的NDJSON格式。

方案1:jq命令快速处理(适合小体积JSON文件)

无需开发复杂代码,安装jq工具后执行以下命令即可完成转换:

jq -c '. as $root | .data[] | . + {edwLoadDate: $root.edwLoadDate, edwRecordSource: $root.edwRecordSource}' 源文件.json > 输出文件.ndjson

处理后的NDJSON示例输出如下:

{"data":{"lastName":"John","firstName":"Doe","email":"john@example123.com"},"edwSequence":"0","edwLoadDate":"2017-01-18T18-08-44","edwRecordSource":"MAILCHIMP"}
{"data":{"lastName":"John","firstName":"Doe","email":"john@example123.com"},"edwSequence":"1","edwLoadDate":"2017-01-18T18-08-44","edwRecordSource":"MAILCHIMP"}

方案2:Python脚本处理(适合大文件/批量处理场景)

如果需要处理S3上的批量文件或者大体积JSON,可使用以下Python脚本,支持直接读写S3文件:

import json
import boto3

s3 = boto3.client('s3')

def convert_json_to_ndjson(bucket, source_key, target_key):
    # 读取S3源JSON文件
    resp = s3.get_object(Bucket=bucket, Key=source_key)
    raw_data = json.loads(resp['Body'].read().decode('utf-8'))
    
    # 提取外层公共元字段
    common_meta = {
        'edwLoadDate': raw_data['edwLoadDate'],
        'edwRecordSource': raw_data['edwRecordSource']
    }
    
    # 生成NDJSON内容
    ndjson_lines = []
    for item in raw_data['data']:
        # 合并公共字段与单条记录
        merged_item = {**item, **common_meta}
        ndjson_lines.append(json.dumps(merged_item, ensure_ascii=False))
    
    # 写入S3目标路径
    s3.put_object(
        Bucket=bucket,
        Key=target_key,
        Body='\n'.join(ndjson_lines).encode('utf-8')
    )

# 调用示例
convert_json_to_ndjson('你的S3桶名', '源JSON路径/xxx.json', '输出NDJSON路径/xxx.ndjson')

如果是GB级以上超大文件,可替换为ijson流式解析库避免内存溢出。

方案3:Lambda自动化流程(生产环境批量作业)

  • 配置S3桶的对象创建事件,触发Lambda函数自动处理新上传的源JSON文件
  • Lambda执行转换逻辑后将NDJSON写入指定S3路径
  • 配置BigQuery定时加载任务,直接从该路径读取NDJSON完成自动导入

注意事项

  • 生成NDJSON时需确保每行是完整独立的JSON结构,无多余逗号、换行,避免BigQuery导入报错
  • 正式全量转换前可先用小样本测试BigQuery导入,确认表结构字段匹配无误
  • 若转换后的字段层级不符合预期,可调整合并逻辑,将内层data的字段直接展开到根层级

内容的提问来源于stack exchange,提问作者databekele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:18:02