如何批量导入CSV或MySQL备份文件到ClickHouse(无需逐个表操作)
批量导入本地CSV/MySQL备份到ClickHouse的方法
一、批量导入本地CSV文件
如果你的CSV文件名与ClickHouse目标表名一一对应(比如user.csv对应user表),可以通过脚本遍历文件实现批量导入,无需逐个执行命令。
示例Bash脚本
#!/bin/bash # 假设所有CSV文件都在当前目录,目标数据库为your_database DB_NAME="your_database" for csv_file in *.csv; do # 从文件名提取表名(去掉.csv后缀) table_name="${csv_file%.csv}" # 执行导入命令,假设首行是列名,用CSVWithNames格式 clickhouse-client --query="INSERT INTO $DB_NAME.$table_name FORMAT CSVWithNames" < "$csv_file" echo "已完成$table_name表的数据导入" done
注意事项
- 确保ClickHouse中已提前创建好对应表的结构(列名、数据类型需与CSV匹配);
- 如果CSV没有首行列名,将
FORMAT CSVWithNames改为FORMAT CSV即可; - 大文件可添加
--max_insert_block_size参数优化导入性能。
二、批量导入MySQL备份SQL文件
MySQL的备份SQL文件(通常由mysqldump生成)可以通过以下两种方式批量导入:
方法1:借助clickhouse-mysql工具同步
clickhouse-mysql是官方推荐的同步工具,可批量同步MySQL的表结构和数据到ClickHouse:
- 安装工具:
pip install clickhouse-mysql - 执行批量同步命令:
clickhouse-mysql --src-host=localhost --src-user=root --src-password=your_mysql_pwd \ --dst-host=localhost --dst-user=default --dst-password=your_clickhouse_pwd \ --database=your_mysql_db --tables='*'
该命令会自动同步指定MySQL数据库下的所有表到ClickHouse。
方法2:解析SQL备份文件批量导入
如果是本地的SQL备份文件,可先将其拆分为表结构和数据文件,再批量处理:
- 用
mysqldump导出时添加--tab=/path/to/export_dir参数,会生成每个表的.sql(结构)和.txt(数据,TSV格式)文件; - 编写脚本遍历
.sql文件,转换为ClickHouse兼容的建表语句并执行; - 再用类似CSV批量导入的脚本,将
.txt文件导入对应表。
补充:ClickHouse CSV/TSV格式导入说明
ClickHouse原生支持CSV和TSV等文本格式的批量数据加载,核心特性包括:
- 兼容标准CSV格式,支持自定义分隔符、引号规则和转义字符;
- 导入时可通过
FORMAT CSV(无列名)或FORMAT CSVWithNames(首行为列名)指定格式; - 支持通过
SET input_format_csv_skip_first_lines = 1跳过首行,或SET input_format_csv_delimiter = ';'自定义分隔符等参数适配不同CSV文件。
内容的提问来源于stack exchange,提问作者Алекс Гусарин
相关产品推荐
相关产品推荐

