influxdb数据转移到clickhouse,顺便记录一些influxdb的常用命令

news2024/12/24 9:38:03

其实应该先写个influxdb初探的,但是当时没有时间·····时间都用来养龟养鱼了··还有摸鱼了。
本篇先讲我是如何将influxdb数据转移到clickhouse的,再记录influxdb的一些常用命令

1、influxdb数据转移到clickhouse

influxdb不管是查询还是导出的数据格式都很麻烦,说一下我一波三折的经历。

  • 起初我是在java中先查询influxdb,再转换并组成sql,导入tdengine,后来调研发现tdengine也很烦,没有很好的社区环境,都是加群,然后几乎不理你,可能它们太忙了,毕竟我也没交钱不是?,代码写的我都看不下去,因为组sql的时候太难受了,最后虽然写成了,但是查询influxdb也特别慢,后来就搁置了
  • 后来调研了clickhouse,感觉非常不错,但是想到组sql就怵,再次搁置
  • 再后来有一次,想把生产的influxdb数据转到测试环境,了解到influxdb可以导出数据成line protocol的格式,灵感来了,我可以写程序,一天一天导出成文件,然后读取,转换,再以文件形式导入CH,这样就避免了组sql,也避免了很多数据格式的转换(比如string转int,float转int之类的)。

总之,思路就是写脚本一天一天的导出influxdb的数据,用python读取,pivot转换成关系数据库的csv的格式文件,导入CH即可。

1)导出
导出的命令:
官网链接:https://docs.influxdata.com/influxdb/v2.1/migrate-data/migrate-oss/

	influxd inspect export-lp \
	  --bucket-id fffffffffffff\
	  --engine-path /data/db/influxdb/engine \
	  --output-path influxdb_export-${str}.gz \
	  --measurement battery \
	  --start 2023-07-01T00:00:00Z \
	  --end 2023-07-01T23:59:59Z \
	  --compress

导出的数据是gzip压缩后的数据,格式是 line protocol

例如:

battery,batteryCode=ffffffffffffff availableEnergy=58.6719970703125 1688169600000000000

一行只有一个字段,battery是measurement名称,batteryCode是tag,可能有多个,我这里只有一个,availableEnergy是字段名称,1688169600000000000是时间戳

脚本参考上一篇文章

2)转换
这里使用python 的pandas库转换,比较方便

transformData.py


import csv
import time

start_time = time.time()


with open('influxdb_export', 'r') as f:
    data = f.readlines()

# index = batteryCode-time
header = ['index', 'columns', 'value']
rows = []
for line in data:
    batteryCode=ss[0]
    timestamp = ss[2]
    column = ss[1].split("=")[0]
    value = ss[1].split("=")[1]
    rows.append([f"{batteryCode}-{timestamp}", column, value])


with open('output.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(header)
    writer.writerows(rows)



end_time = time.time()

run_time = end_time - start_time

print(f"代码运行时间:{run_time:.2f}秒,处理数据:{len(rows)}条")


输出的output.csv格式为:

index,columns,value
fffffffffff-1688169600000000000,availableEnergy,58.6719970703125
fffffffffff-1688169600000000000,bbbbbbb,58.6719970703125
fffffffffff-1688169600000000000,ccccccc,58.6719970703125
fffffffffff-1688169600000000000,dddddd,58.6719970703125

转换成这种格式是为了方便pivot,把行转为列
一个电池code和时间肯定是唯一的,所以把batteryCode-timestamp作为index

pivotData.py


import pandas as pd
import time

start_time = time.time()

# 读取csv文件
df = pd.read_csv('output.csv',dtype=str)


# 将index列拆分为batteryCode和timestamp两列
df[['batteryCode', 'timestamp']] = df['index'].str.split('-', expand=True)

# 透视表格
pivot_df = df.pivot(index=['batteryCode', 'timestamp'], columns='columns', values='value')

# 重置索引
pivot_df = pivot_df.reset_index()

# 保存到csv文件
pivot_df.to_csv('outputs.csv', index=False)

end_time = time.time()

run_time = end_time - start_time

print(f"代码运行时间:{run_time:.2f}秒")

这里只是为了pivot,分成两个脚本是为了观察中间输出的文件格式是否正确。我在本地测试的原始文件一天是500M,两个脚本都是用时20秒左右,如果合成一个脚本,没有中间的IO,应该会快很多。
转换后的数据就会是正常的csv了。

batteryCode,timestamp,availableEnergy,aaa,bbb,ccc,ddd
00VPB13111S0A1CCE0000001,1688169600000000000,58.6719970703125,9i,687.7999877929688,0,0i,31

这里介绍下pivot:
在这里插入图片描述
很方便的函数,中文叫透视,我觉得很形象。excel也有类似函数
官网链接:https://www.pypandas.cn/docs/user_guide/reshaping.html

3)导入
导入就简单了哈

# 建库建表
CREATE DATABASE IF NOT EXISTS device
CREATE TABLE device.battery
(
	batteryCode String,
	timestamp DateTime,
	availableEnergy String,
	aaaaa String,
	bbbbb String,
	cccccc String,
	dddddd String
)
ENGINE = MergeTree()
PRIMARY KEY (batteryCode, timestamp)
# 导入
clickhouse-client --port 9001 -q "INSERT INTO device.battery FORMAT CSV" < influx_output.csv

这里我的端口是9001,默认是9000,所以要显式设置

补充一下,真实导出的是 .gz 的 压缩文件,python可以直接读取压缩文件:

import gzip

with gzip.open('file.gz', 'rt') as f:
    for line in f:
        # 处理每一行数据
        print(line.strip())

2、记录一些influxdb的常用命令

直接在influxdb里面pivot

from(bucket: "device")
  |> range(start: 2023-02-28T00:00:00Z, stop: 2023-02-28T01:00:00Z)
  |> filter(fn: (r) => r._measurement == "car" )
  |> drop(columns: ["_start", "_stop", "_measurement"])
  |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value") 
  |> group(columns: ["_time"]) 

从influxdb导出

	influxd inspect export-lp \
	  --bucket-id f8f18a96df05f4ee \
	  --engine-path /data/db/influxdb/engine \
	  --output-path influxdb_export-${str}.gz \
	  --measurement battery \
	  --start 2023-07-${str}T00:00:00Z \
	  --end 2023-07-${str}T23:59:59Z \
	  --compress

必须在influxdb服务器上导出,因为要指定engine-path。

导入influxdb

	influx write \
		--bucket device_from_prod \
		--file /root/influxdbdata/influxdb_export.gz

count

from(bucket: "test")
  |> range(start: -2d,stop: 2d)
  |> filter(fn: (r) => r._field == "current")
  |> group(columns: ["current"])
  |> count()

查看日志

journalctl -u influxdb -n 1000

本地创建config

influx config create --active\
  -n dev-config \
  -u http://localhost:8086 \
  -p rootdev:rootdev\
  -o hph
  

压缩命令

zip backup.zip influxdb_export-*.gz

backup.zip 是压缩后的名称,后面是要压缩的文件,我老是搞反

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/783313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快手内推(2024校招,社招)

校招 校招可以直接投递&#xff0c;如果想投递指定部门或岗位的可以私聊我。可以帮看简历和面试状态&#xff0c;加快推进。 内推码&#xff1a;vlxMTFNBS 专属内推链接&#xff1a;https://campus.kuaishou.cn/#/campus/jobs?codevlxMTFNBS 社招 社招内推私聊&#xff0c;可…

Ubuntu 安装 Gif 工具 -- Peek

Ubuntu 安装 Gif 工具 – Peek 一直想找一个 Ubuntu 下的录制 Gif 的工具&#xff0c;后来测试发现 Peek 非常舒服&#xff0c;推荐使用&#xff5e;&#xff5e;&#xff5e; 一、添加Peek的ppa源 sudo add-apt-repository ppa:peek-developers/stable二、更新源 sudo apt…

春秋云境:CVE-2022-24124(Casdoor api get-oraganizations SQL注入)

目录 一、题目&#xff1a; 二、进入题目&#xff1a; 1.官方POC&#xff1a; 2.SQL的分析&#xff1a; 2.1 POC: 2.2 burp爆破字符&#xff1a; 2.3 大佬的POC&#xff08;SQL查询&#xff09;&#xff1a; 一、题目&#xff1a; 题目介绍&#xff1a; Casdoor是开源的…

23.7.20 杭电暑期多校2部分题解

1001 - Alice Game 题目大意 有一个长度为 n n n 的怪物序列&#xff08; n n n 可能为 0 0 0&#xff09;&#xff0c;给定一个 k k k&#xff0c;轮到某人回合时会有两种操作&#xff1a; 选择一个连续的序列&#xff0c;它的长度小于等于 k k k&#xff0c;将其全部删…

【转载】elasticsearch 倒排索引原理

由于整型数字 integer 可以被高效压缩的特质&#xff0c;integer 是最适合放在 postings list 作为文档的唯一标识的&#xff0c;ES 会对这些存入的文档进行处理&#xff0c;转化成一个唯一的整型 id&#xff08;这个id是document的id&#xff09;。 再说下这个 id 的范围&…

VS Code 使用 autoDocstring 插件快速生成 python 函数的文档字符串

VS Code 使用 autoDocstring 插件快速生成 python 函数的文档字符串 支持的文档类型用法扩展设置此扩展提供以下设置&#xff1a;设置方式自定义文档字符串模板附加部分 支持的文档类型 googlesphinxnumpydocBlockrone-line-sphinxpep257 用法 光标必须位于定义正下方的行上…

【strapi系列】strapi在postman中如何调试public和认证用户Authorization的接口

文章目录 一、public用户的调试二、认证用户的调试1、新建一个用户&#xff0c;用于获得token2、调用获取token的接口来获得token3、请求时携带token调用权限接口 三、参考链接 一、public用户的调试 对于public用户&#xff0c;如果是get请求&#xff0c;即使不在postman&…

【git学习】

版本控制 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。 实现跨区域多人协同开发追踪和记载一个或者多个文件…

wordpress如何实现显示文章和分类ID?

可以直接将下面的代码添加到当前主题的 functions.php 文件即可 <?php /*** WordPress后台的文章、分类&#xff0c;媒体&#xff0c;页面&#xff0c;评论,链接等所有信息中显示ID并将ID设置为第一列*/ // 添加一个新的列 ID function ssid_column($columns) {//将ID设置…

一个企业级的文件上传组件应该是什么样的

目录 1.最简单的文件上传 2.拖拽粘贴样式优化 3.断点续传秒传进度条 文件切片 计算hash 断点续传秒传(前端) 断点续传秒传(后端) 进度条 4.抽样hash和webWorker 抽样hash(md5) webWorker 时间切片 5.文件类型判断 通过文件头判断文件类型 6.异步并发数控制(重要…

Linux部署程序之glibc兼容性问题

Linux部署程序之glibc兼容性问题 在部署程序的时候&#xff0c;一般会遇到glibc不兼容的问题&#xff0c;现象如下&#xff1a; /lib64/libstdc.so.6: version GLIBCXX_3.4.21’ not found在此之前先要了解一下 gcc/glibc/libc/libstdc 是什么东东。 gcc/glibc/libc/libstdc…

PHP变量和常量(基础语法)

文章目录 PHP变量和常量&#xff08;基础语法&#xff09;简介变量常量 PHP中的变量变量基础全局变量超全局变量静态变量 PHP常量基础总结 PHP变量和常量&#xff08;基础语法&#xff09; 简介 变量和常量是编程语言中不可或缺的元素&#xff0c;它们类似于盒子&#xff0c;…

06 QT自定义信号和槽

案例&#xff1a;创建教师类和学生类&#xff0c;教师发出自定义hungry信号&#xff0c;学生响应信号&#xff0c;执行treat函数。 创建老师和学生类&#xff08;由于老师和学生不是控件&#xff0c;所以选择QObject作为基类&#xff09; 1&#xff1a;老师发送自定义信号&…

「深度学习之优化算法」(十七)灰狼算法

1. 灰狼算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   灰狼算法(Grey Wolf Algorithm)是受灰狼群体捕猎行为启发而提出的算法。算法提出于2013年,仍是一个较新的算法。目前为止(2020)与之相关的论文也比较多,但多为算法的应用,应该仍有研究和改进的余…

Qgis二次开发-实现缩略图、标注

1.效果图 2.简介 因为上述动作是和画布进行交互&#xff0c;所以首先需要自定义一个地图交互工具类&#xff0c;由于做的比较简单&#xff0c;只需要重写实现鼠标点击事件。 void canvasPressEvent(QgsMapMouseEvent *e) override; 其次就是在地图画布上画标注图片(svg格式)…

Docker中的网络

文章目录 一、Docker 网络1.1 Docker 网络实现原理1.2 查看容器的输出和日志信息Docker 的网络模式 二、资源控制2.1 CPU 资源控制2.2 对内存使用的限制 一、Docker 网络 1.1 Docker 网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&a…

CentOS7安装并远程连接MySQL8.0.33

一、前言 学习MySQL进阶篇时需要在CentOS上安装MySQL&#xff0c;然后远程连接使用&#xff0c;于是就抽了两天时间把瑞吉外卖的Linux篇给看了95% 本篇是摘选了学习笔记中关于安装MySQL的部分&#xff0c;作为参考也作为分享 二、安装MySQL 先检测当前系统中是否已安装MySQL…

平头哥 TH1520 RISC-V BeagleV-Ahead使用Thead-Yocto自定义构建系统 最详细版本

使用Thead-Yocto自定义BeagleV-Ahead系统 Thead-Yocto简述 官网&#xff1a;https://www.yoctoproject.org/ THE YOCTO PROJECT. IT’S NOT AN EMBEDDED LINUX DISTRIBUTION,IT CREATES A CUSTOM ONE FOR YOU. YOCTO项目&#xff1a;他不是一个嵌入式Linux发行版&#xff0c…

SQL SERVER安装

其中服务器名称输入./自己本机电脑名称. nchar类型一个单位可以放一个汉字-------长度短的补空格一个字节8位一个汉字两个字节 char类型两个单位可以放一个汉字 nvarchar类型是可变长度-----------长度短不会补空格 varchar类型是可变长度两个单位可以放一个汉字---------…

电脑显示连接上WiFi,但没办法上网

问题: 电脑显示已经连接上WiFi。但是百度不出来东西&#xff0c;也没办法打开任何网页。 解决方法&#xff1a; win10系统 在左下角搜索栏&#xff0c;搜索“代理服务器设置”。 找到手动设置代理 —》关闭“使用代理服务” 【默认是打开的】 关闭之后即可上网~~