当前位置: 首页 > news >正文

Python实现高效导入Excel数据到ClickHouse

设计一个从Excel文件导入Clickhouse表的程序流程,并用Python来实现。单进程读取Excel文件,分批读取,每批读取1000条,使用INSERT的语句带多组值来写入数据库,比如100组值,可以创建多个列表来缓存这些插入数据库的语句,实现连续读取数据不中断,创建单个进程来读取顺序这些列表来写入表,读取完列表的数据之后,清空列表以便下一次再写入插入数据库的依据,我希望读取和写入数据库的操作,尽量减少中间锁对象和等待完成的时间,以最高的性能运行。

import pandas as pd
import queue
import threading
from clickhouse_driver import Client
from time import perf_counterclass ExcelToClickHouse:def __init__(self, excel_path, ch_host, ch_database, ch_table, batch_size=1000, insert_batch=100):""":param excel_path: Excel文件路径:param ch_host: ClickHouse服务器地址:param ch_database: 数据库名:param ch_table: 表名:param batch_size: 每批读取行数:param insert_batch: 每次插入的批次数"""self.excel_path = excel_pathself.ch_client = Client(host=ch_host, database=ch_database)self.ch_table = ch_tableself.batch_size = batch_sizeself.insert_batch = insert_batchself.data_queue = queue.Queue(maxsize=10)  # 控制内存使用self.producer_done = threading.Event()self.total_rows = 0self.inserted_rows = 0self.lock = threading.Lock()def _producer(self):"""生产者:读取Excel并分批次放入队列"""try:# 首次读取获取列名df_sample = pd.read_excel(self.excel_path, nrows=1)columns = df_sample.columns.tolist()# 重新创建迭代器reader = pd.read_excel(self.excel_path, chunksize=self.batch_size,iterator=True)for chunk in reader:# 转换为元组列表 (更高效的数据格式)data = [tuple(row) for row 

相关文章:

  • ImageNet 上的安全外包神经网络推理
  • HarmonyOS5 购物商城app(二):购物车与支付(附代码)
  • 使用DevEco Testing快速创建HarmonyOS5单元测试
  • 从源码角度了解Elasticsaerch(分布式协调排序、深分页问题)
  • 【Java】脱离 JVM 约束 GraalVM + Liberica NIK + Spring + Docker 将 Java 编译为平台二进制可执行文件
  • 亚马逊深度整合全食超市,重塑全球跨境电商与生鲜零售格局
  • FPGA基础 -- Verilog语言要素之值集合
  • CentOS7安装MySQL8.0.42
  • 展开说说Android之Retrofit详解_使用篇
  • 深度解析MySQL中的Join算法:原理、实现与优化
  • 如何在 Windows 上打造 macOS 式快速查看体验?
  • 2025最新1000+道Java面试题+答案整理(附JVM/MySQL/Spring/Redis)
  • 136.在 Vue3 中使用 OpenLayers 实现 GroupLayer 的添加、删除、显示、隐藏
  • P2C (Point-to-Curve) 算法深度解析
  • 传统的提示词优化中,损失函数有哪些
  • iOS即时通讯发送图片消息内存暴涨优化
  • 10.C S编程错误分析
  • MySQL 自增主键 ID 设置为 0有坑
  • 二叉树的最大深度题解
  • Apache Kafka Connect任意文件读取漏洞(CVE-2025-27817)
  • 大连网站排名/互动营销是什么意思
  • 企业级java电商网站开发笔记/产品线上营销有哪些方式
  • 做汽车网站/免费推广方式都有哪些
  • 徐州网站建设方案开发/免费推广产品的网站
  • 平面设计展示网站/灰色词网站seo
  • 赣州网站建设优化服务/简单的个人主页网站制作