influxdb数据导出笔记
influx query ‘from(bucket: “byt-grid-data”)
|> range(start: 2025-04-01T00:00:00Z, stop: 2025-04-02T23:59:59Z)
|> filter(fn: ® => r[“_measurement”] == “byt-gzsn-hsxn-sc-dcs”)
|> filter(fn: ® => r[“_field”] == “F_ACT_FZZ02_FB_O”)
|> filter(fn: ® => r[“host”] == “host1”)
|> toFile(file: “/tmp/restored_data.csv”)’
influx query ‘from(bucket: “byt-grid-data”)
|> range(start: 2025-04-01T00:00:00Z, stop: 2025-04-01T00:59:59Z)
|> filter(fn: ® => r[“_measurement”] == “byt-gzsn-hsxn-sc-dcs”)
|> filter(fn: ® => r[“_field”] == “F_ACT_FZZ02_FB_O”)
|> filter(fn: ® => r[“host”] == “host1”)’ > /tmp/t001.csv
查询InfluxDB并返回带注释的CSV
influx query ‘from(bucket: “byt-grid-data”)
|> range(start: 2025-04-10T00:00:00Z, stop: 2025-04-11T01:00:00Z)
|> filter(fn: ® => r[“_measurement”] == “byt-gzsn-hsxn-sc-dcs”)
|> filter(fn: ® => r[“_field”] == “F_ACT_FZZ02_FB_O”)
|> filter(fn: ® => r[“host”] == “host1”)
|> timeShift(duration: 8h)’ --raw > /tmp/t002.csv
influx query ‘from(bucket: “byt-grid-data”)
|> range(start: 2025-04-10T00:00:00+08:00, stop: 2025-04-11T00:00:00+08:00)
|> filter(fn: ® => r[“_measurement”] == “byt-gzsn-hsxn-sc-dcs”)
|> filter(fn: ® => r[“_field”] == “F_ACT_FZZ02_FB_O”)
|> filter(fn: ® => r[“host”] == “host1”)
|> timeShift(duration: 8h)’ --raw > /tmp/t002.csv
登陆ftp
lftp -u hl,Admin@123 -p 63036 122.224.62.130
惠水西南边缘端
核心脚本
/root/bin/export_influx.sh
#!/bin/bash
# 使用方法: ./export_influx.sh <标签名称> <开始日期> <结束日期> <输出目录>
# 示例: ./export_influx.sh F_ACT_FZZ02_FB_O 2025-04-01 2025-04-03 ./output
if [ $# -ne 4 ]; then
echo "错误:参数数量不正确!"
echo "用法: $0 <标签名称> <开始日期> <结束日期> <输出目录>"
exit 1
fi
TAG="$1"
START_DATE="$2"
END_DATE="$3"
OUTPUT_DIR="$4"
# 创建输出目录
OUTPUT_DIR="$OUTPUT_DIR"/"$TAG"
mkdir -p "$OUTPUT_DIR"
# 日期格式校验
date -d "$START_DATE" +%Y-%m-%d >/dev/null 2>&1 || { echo "无效的开始日期格式"; exit 1; }
date -d "$END_DATE" +%Y-%m-%d >/dev/null 2>&1 || { echo "无效的结束日期格式"; exit 1; }
# 将日期转换为秒数(用于循环)
START_SEC=$(date -d "$START_DATE" +%s)
END_SEC=$(date -d "$END_DATE" +%s)
if [ $START_SEC -gt $END_SEC ]; then
echo "错误:开始日期不能晚于结束日期!"
exit 1
fi
# 记录开始时间
start_time_p=$(date +%s)
echo "开始时间: $(date -d @"$start_time_p" '+%Y-%m-%d %H:%M:%S')"
# 按天循环处理
current_sec=$START_SEC
while [ $current_sec -lt $END_SEC ]; do
# 获取当前循环日期
CURRENT_DATE=$(date -d @$current_sec +%Y-%m-%d)
# 增加一天
current_sec=$((current_sec + 86400))
STOP_DATE=$(date -d @$current_sec +%Y-%m-%d)
# 生成时间范围(当日00:00:00到次日00:00:00)
START_TIME="${CURRENT_DATE}T00:00:00+08:00"
STOP_TIME="${STOP_DATE}T00:00:00+08:00"
# 生成输出文件名
OUTPUT_FILE="${OUTPUT_DIR}/${CURRENT_DATE}.csv"
echo "正在导出 ${CURRENT_DATE} 的数据到 ${OUTPUT_FILE}..."
# 执行查询命令
influx query "
from(bucket: \"byt-grid-data\")
|> range(start: $START_TIME, stop: $STOP_TIME)
|> filter(fn: (r) => r[\"_measurement\"] == \"byt-gzsn-hsxn-sc-dcs\")
|> filter(fn: (r) => r[\"_field\"] == \"$TAG\")
|> filter(fn: (r) => r[\"host\"] == \"host1\")
|> timeShift(duration: 8h)
" --raw > "$OUTPUT_FILE"
# 检查文件是否为空
if [ ! -s "$OUTPUT_FILE" ]; then
echo "警告:${CURRENT_DATE} 无数据,删除空文件"
rm -f "$OUTPUT_FILE"
fi
done
echo "导出完成!"
# 记录结束时间
end_time_p=$(date +%s)
# 计算耗时
elapsed_time=$((end_time_p - start_time_p))
# 格式化耗时
days=$((elapsed_time / 60 / 60 / 24))
hours=$((elapsed_time / 60 / 60 % 24))
minutes=$((elapsed_time / 60 % 60))
seconds=$((elapsed_time % 60))
# 打印耗时
echo "开始时间: $(date -d @"$start_time_p" '+%Y-%m-%d %H:%M:%S')"
echo "结束时间: $(date -d @"$end_time_p" '+%Y-%m-%d %H:%M:%S')"
printf "耗时: %02dd%02dh%02dm%02ds\n" $days $hours $minutes $seconds