如何通过AWS Lambda将Redshift查询结果存储为表格并推送通知
解决方案整理
一、将查询结果存储到Redshift新表或其他AWS服务
1. 直接写入Redshift新表
不用把数据拉到Lambda再处理,直接在Lambda中执行Redshift的SQL语句完成存储:
- 一次性创建新表并写入:
加CREATE TABLE IF NOT EXISTS daily_report AS SELECT col1, col2, col3 FROM source_table WHERE date = CURRENT_DATE;IF NOT EXISTS避免重复创建表,若需要每日覆盖数据,可先执行TRUNCATE TABLE daily_report;再用INSERT INTO写入。 - 增量更新已有表:
INSERT INTO daily_report (col1, col2, col3) SELECT col1, col2, col3 FROM source_table WHERE date = CURRENT_DATE;
2. 存储到其他AWS服务方便分享
- Amazon S3:用Redshift的
UNLOAD命令直接导出查询结果到S3,跳过Lambda本地存储环节,效率更高:
生成的文件可通过S3权限设置分享给他人,也可搭配Athena直接查询。UNLOAD ('SELECT col1, col2 FROM source_table WHERE date = CURRENT_DATE') TO 's3://your-bucket/daily-reports/result_' IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-S3-Access-Role' FORMAT AS CSV HEADER ALLOWOVERWRITE; - Amazon Athena:把S3中的导出文件创建为Athena外部表,支持其他人用SQL查询数据。
- Amazon QuickSight:将Redshift目标表或S3数据接入QuickSight,制作可视化仪表盘后分享给团队。
二、解决Lambda写/tmp上传S3超时问题
- 优先改用Redshift UNLOAD直接到S3:完全绕开Lambda本地存储,从根源避免超时。
- 调整Lambda配置:提升Lambda的内存配额(内存越高,CPU和网络带宽同步提升),同时将超时时间调至合理范围(最大支持15分钟)。
- 分块处理上传:如果必须用Lambda中转,不要一次性加载全部数据到内存,分批次读取查询结果、分块写入/tmp并上传S3。
- 同区域部署:确保Lambda与目标S3桶在同一个AWS区域,跨区域传输会增加延迟导致超时。
- 使用SDK高效上传方法:比如Python的boto3用
s3.upload_file()替代putObject,它会自动处理大文件分块上传。
内容的提问来源于stack exchange,提问作者Dinho
相关产品推荐
相关产品推荐

