导入60G的CSV文件数据到clickhouse报错

一般导入csv到clickhouse报错都是数据格式有问题,解决办法可忽略错误

修改config.xml,添加下面配置:

<input_format_allow_errors_num>100</input_format_allow_errors_num>

clickhouse-client --input_format_allow_errors_num=1  --input_format_allow_errors_ratio=0.1 --password default --query "insert into tb FORMAT CSV" --max_insert_block_size=100000 < data_csv

 

 

### 将CSV文件导入ClickHouse数据库 为了将CSV文件中的数据成功导入ClickHouse数据库,可以采用Python脚本完成这一过程。此方法涉及通过SFTP获取远程服务器上的CSV文件并将其内容解析为适合插入ClickHouse数据结构。 #### 建立SSH连接并通过SFTP下载CSV文件 使用`paramiko`库建立安全的SSH连接,并利用该连接创建一个SFTP客户端来访问远程位置存储的CSV文件[^1]: ```python import paramiko import csv host = '主机名称' conn = paramiko.SSHClient() conn.set_missing_host_key_policy(paramiko.AutoAddPolicy()) conn.connect(host, username='用户名', password='密码', look_for_keys=False, allow_agent=False) sftp_client = conn.open_sftp() remote_file = sftp_client.open('文件地址') readcsv = list(csv.reader(remote_file, delimiter=',')) # 将读取的结果转换成列表形式以便后续处理 remote_file.close() conn.close() ``` #### 数据预处理与ORM配置 在准备向ClickHouse发送之前,可能需要对从CSV获得的数据做一些必要的清理工作,比如去除空白行或调整字段格式等。接着定义相应的模型类用于表示表结构以及映射关系。 对于ClickHouse而言,虽然官方推荐的是直接执行SQL语句来进行批量操作而不是依赖于传统的ORM框架,但是仍然可以通过自定义的方式模拟类似的机制。这里假设已经安装好了`clickhouse-connect`驱动程序并且能够正常连接目标实例。 ```python from clickhouse_connect import get_client client = get_client( host='localhost', port=8123, username='default', password='' ) table_name = "your_table" columns = ["column1", "column2"] # 替换成实际列名 data_to_insert = [] for row in readcsv[1:]: # 跳过标题行 processed_row = tuple([str(item).strip() for item in row])[:len(columns)] # 清洗每条记录并截断多余部分 data_to_insert.append(processed_row) insert_query = f"INSERT INTO {table_name} ({','.join(columns)}) VALUES" try: client.insert(insert_query, data_to_insert) except Exception as e: print(f"Failed to insert into ClickHouse due to error: {e}") finally: client.close() ``` 上述代码片段展示了如何构建一条适用于ClickHouse的插入命令,并传递待写入的数据集给它。注意这里的`columns`变量应该被设置为目标表格中存在的具体字段名称;而`data_to_insert`则包含了所有要新增加进去的实际值集合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值