建立网站时间,宁波建设网站公司推荐,wordpress 导入用户,三亚网吧多少钱一个小时目录 前言思路与核心代码优缺点分析 前言
dataframe是用python做数据分析最场景的数据结构了#xff0c;如何将dataframe数据快速写入到clickhouse数据库呢#xff1f;这里介绍几种方法#xff0c;各有优劣势#xff0c;可以结合自己的使用场景挑用。
思路与核心代码
假… 目录 前言思路与核心代码优缺点分析 前言
dataframe是用python做数据分析最场景的数据结构了如何将dataframe数据快速写入到clickhouse数据库呢这里介绍几种方法各有优劣势可以结合自己的使用场景挑用。
思路与核心代码
假设df是一个dataframe数据结构一共有5个列。
to_records一条一条插入
df pd.Dataframe()for x in df.to_records(index False): sql INSERT INTO database.table_name(col1,col2,col3,col4,col5)VALUESstr(tuple(x))# print(sql)client.execute(sql)这种方法将dataframe里面每一个看车一个record记录一条记录一条记录插入clickhouse数据表不容易出岔子但是一旦数据量很大就会要很长时间
整个dataframe插入
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的方法一次性塞入表里面
df pd.Dataframe()df.to_sql(database.table_name, conn, if_existsappend, indexFalse) parallel插入
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, parametersNone, execution_profileparallel)对于超大型数据集建议使用ClickHouse的并行插入功能或其他分布式技术。
优缺点分析
1如果提前构造好了dataframe且dataframe数据量适中那么可以考虑一次性塞入如果dataframe数据量足够大超出了内存容量那么就要考虑了 2对于哪些容易丢失的还是一条一条插入数据库为好