如何编写Griddb存储过程,每月首个周六定时导出数据至S3
实现GridDB月度传感器数据定时导出到S3的方案
1. 核心逻辑拆解
要实现每月第一个周六自动导出GridDB中传感器月度数据到S3,需要三个核心环节:
- GridDB数据查询与本地导出脚本
- 基于crontab的定时调度(匹配每月第一个周六)
- S3对象存储的上传集成
2. GridDB数据导出脚本(Python实现)
用GridDB Python API查询指定时间范围的传感器数据,导出为CSV文件,方便后续上传。
脚本示例(export_sensor_data.py)
import griddb_python as griddb import pandas as pd from datetime import datetime, timedelta import boto3 import os # GridDB连接配置 factory = griddb.StoreFactory.get_instance() try: store = factory.get_store( host='your_griddb_host', port=31810, cluster_name='your_cluster', username='admin', password='admin' ) except griddb.GSException as e: print(f"GridDB连接失败: {e.get_message()}") exit(1) # 计算上月日期范围 today = datetime.today() last_month_start = (today.replace(day=1) - timedelta(days=1)).replace(day=1) last_month_end = today.replace(day=1) - timedelta(days=1) # 查询传感器数据 try: container = store.get_container('sensor_data') query = f""" SELECT * FROM sensor_data WHERE timestamp BETWEEN TIMESTAMP('{last_month_start.strftime('%Y-%m-%d %H:%M:%S')}') AND TIMESTAMP('{last_month_end.strftime('%Y-%m-%d %H:%M:%S')}') """ rs = container.query(query) data = [] while rs.has_next(): row = rs.next() data.append(row) # 转换为DataFrame并导出CSV df = pd.DataFrame(data, columns=['sensor_id', 'timestamp', 'temperature', 'humidity']) export_file = f"sensor_data_{last_month_start.strftime('%Y%m')}.csv" df.to_csv(export_file, index=False) print(f"数据导出完成: {export_file}") except griddb.GSException as e: print(f"数据查询/导出失败: {e.get_message()}") exit(1) # 上传到S3 try: s3 = boto3.client('s3') bucket_name = 'your-s3-bucket' s3.upload_file(export_file, bucket_name, f"monthly_data/{export_file}") print(f"文件已上传至S3: s3://{bucket_name}/monthly_data/{export_file}") # 清理本地临时文件 os.remove(export_file) except Exception as e: print(f"S3上传失败: {str(e)}") exit(1)
3. 定时调度配置(Linux Crontab)
通过crontab设置每月第一个周六的0点执行导出脚本。
Crontab表达式配置
执行crontab -e添加以下内容:
0 0 * * 6 [ $(date +\%d) -le 7 ] && /usr/bin/python3 /path/to/export_sensor_data.py >> /var/log/griddb_export.log 2>&1
0 0 * * 6:每周六0点触发[ $(date +\%d) -le 7 ]:仅当日期在1-7号时执行(即每月第一个周六)- 日志输出到
/var/log/griddb_export.log方便排查问题
4. 关键注意事项
- 凭证安全:GridDB和AWS的凭证不要硬编码在脚本中,建议使用环境变量或配置文件(如AWS的
~/.aws/credentials) - 数据压缩:如果数据集较大,可在导出后用
zip或gzip压缩,减少上传时间和S3存储成本 - 错误处理:在脚本中添加更完善的异常捕获和告警逻辑(如邮件通知)
- 权限配置:确保执行脚本的用户有GridDB读取权限和S3写入权限
5. 验证步骤
- 手动执行脚本:
python3 /path/to/export_sensor_data.py,检查是否生成CSV并成功上传到S3 - 查看日志文件:
cat /var/log/griddb_export.log确认无报错 - 验证数据完整性:对比S3中的CSV数据与GridDB中的原始数据
内容的提问来源于stack exchange,提问作者pramod m nair
相关产品推荐
相关产品推荐

