python如何将一个dataframe快速写入clickhouse

目录

前言

dataframe是用python做数据分析最场景的数据结构了,如何将dataframe数据快速写入到clickhouse数据库呢?这里介绍几种方法,各有优劣势,可以结合自己的使用场景挑用。

思路与核心代码

假设df是一个dataframe数据结构,一共有5个列。

  • to_records一条一条插入
python 复制代码
df = pd.Dataframe()

for x in df.to_records(index = False): 
    sql = "INSERT INTO database.table_name(col1,col2,col3,col4,col5)VALUES"+str(tuple(x))
    # print(sql)
    client.execute(sql)

这种方法将dataframe里面每一个看车一个record记录,一条记录一条记录插入clickhouse数据表,不容易出岔子,但是一旦数据量很大,就会要很长时间;

  • 整个dataframe插入
python 复制代码
df = pd.Dataframe()

insert_query = 'INSERT INTO  database.table_name(col1,col2,col3,col4,col5)VALUES'  
values_query = ','.join([tuple(df.iloc[i]) for i in range(len(df))])  
insert_query += f' ({",".join([f"({col}, {val})" for col, val in zip(df.columns, values_query)])})'  
cursor = conn.cursor()  
cursor.execute(insert_query)

这种方法先利用values_query变量将每一行的数据转换为字符串形式,然后,使用INSERT语句将通过将整个DataFrame一次性插入ClickHouse中,避免了频繁的网络通信,从而提高了性能。但是需要注意的是,这种方法只适用于小型数据集。其实,也可以仿MySQL那样用to_sql的方法一次性塞入表里面

python 复制代码
df = pd.Dataframe()

df.to_sql('database.table_name', conn, if_exists='append', index=False) 
  • parallel插入
python 复制代码
insert_query = 'INSERT INTO my_table (name, age, salary) VALUES'  
values_query = ','.join([tuple(df.iloc[i]) for i in range(len(df))])  
insert_query += f' ({",".join([f"({col}, {val})" for col, val in zip(df.columns, values_query)])})'  
cursor = conn.cursor()  
cursor.execute(insert_query, parameters=None, execution_profile='parallel')

对于超大型数据集,建议使用ClickHouse的并行插入功能或其他分布式技术。

优缺点分析

1,如果提前构造好了dataframe,且dataframe数据量适中,那么可以考虑一次性塞入,如果dataframe数据量足够大超出了内存容量,那么就要考虑了;

2,对于哪些容易丢失的还是一条一条插入数据库为好;

相关推荐
数字智核几秒前
2026昆山工厂空压机突然停机怎么办?找谁抢修
服务器·网络·数据库
2601_9622972514 分钟前
Python、Pytest、Allure、Selenium和Jenkins实现自动化测试集成实例
python·selenium·jenkins·pytest·allure
AAA代码批发商21 分钟前
Days 39 Linux C 开发之 SQLite 数据库完整学习笔记
linux·c语言·数据库
笑梦无境21 分钟前
mysql的安装及配置(3)
数据库·mysql·adb
电商API_1800790524722 分钟前
跨境1688代采商家,如何借助API打通供应链,实现效率跃迁
大数据·数据库·网络爬虫
小雪崩23 分钟前
嵌入式学习 day40:数据库
数据库·学习
今天AI了吗29 分钟前
Codex 配置自定义 AI API 完整指南:从零到一接入你的专属模型
java·人工智能·python·数据分析·embedding
阿童木写作35 分钟前
跨境电商批量图片翻译与视频字幕翻译工具推荐
python·音视频
Aloudata41 分钟前
语义层 vs MCP 工具层:Agent 调用数据时,语义应该放在哪一层
数据库·数据分析·chatbi·data agent·语义层
zcmodeltech41 分钟前
源网荷储一体化沙盘模型多场景控制系统设计——基于STM32与Modbus RTU的源网荷储、多能互补、冷热电三联供全场景联动方案,服务范围覆盖全国
数据库·人工智能·stm32·单片机·嵌入式硬件