如何将csv.gz插入ClickHouse的test_table?Python客户端执行报错求助
问题原因与解决方法
错误原因
你使用的FROM INFILE是ClickHouse原生命令行客户端(clickhouse-client)的本地文件导入语法,无法通过clickhouse_connect依赖的HTTP接口执行:
- Docker容器内的ClickHouse服务器无法直接访问你本地机器的
data.csv.gz文件; - HTTP接口不支持
FROM INFILE这类依赖客户端本地文件的查询语法,因此返回UNKNOWN_TYPE_OF_QUERY错误。
解决方法
方法一:使用clickhouse_connect内置的insert_file方法(推荐)
clickhouse_connect专门提供了insert_file方法处理本地文件导入,支持自动上传文件、识别压缩格式,代码更简洁:
import clickhouse_connect # 初始化客户端 client = clickhouse_connect.get_client(host='localhost', port=18123) # 直接导入本地压缩CSV文件 client.insert_file( file_path='data.csv.gz', table='test_table', format='CSV', compression='gzip' )
方法二:读取文件内容后通过HTTP接口提交
如果更习惯SQL语法,可以手动读取本地压缩文件的内容,再通过command方法提交:
import clickhouse_connect import gzip client = clickhouse_connect.get_client(host='localhost', port=18123) # 读取本地gzip压缩的CSV文件内容 with gzip.open('data.csv.gz', 'rt', encoding='utf-8') as f: csv_content = f.read() # 执行INSERT语句并传入文件内容 client.command("INSERT INTO test_table FORMAT CSV", data=csv_content)
内容的提问来源于stack exchange,提问作者MoneyBall
相关产品推荐
相关产品推荐

