数据导出
命令行导出
clickhouse-client -d yourdb --password yourpasswrod --query="select * from t_fenqun_result FORMAT CSV" > fenqun_result.csv
注意参数中间只能有一个空格,否则或报错
导出的数据字段用逗号分割,但是会用双引号包裹,需去掉双引号
sed -i 's/\"//g' fenqun_result.csv
dbeaver工具导出
另外也可以通过dbeaver工具进行数据的导出
数据导入
此处数据导入是针对分布式表数据的导入
1.需求
针对t_fenqun_result表查询效率慢的问题(数量在150w),要重新分区
旧的t_fenqun_result是 PARTITION BY dt_date ORDER BY (task_id)
,查询user_id时会全表检索,性能较低。
新的表根据user_id生成hash_code,然后取余 hash_code%128
,在查询 user_id 的同时将 hash_code 也作为查询条件。通过观察查询日志,发现检索量很小,有利于检索性能
2.思路
由于t_fenqun_result是在用表,不能删除后长时间缺失,打算先将重新分区后的数据写入到clickhouse临时表,然后通过临时表再导入,(因为从临时表导入速度很快,150w数据1.6秒就完成导入)
第一步
将数据生成至临时表
-- 分布式表
itv.t_fenqun_result_new_local
-- 总表
itv.t_fenqun_result_new
第二步
-- 删除旧表
drop table itv.t_fenqun_result on cluster czf_cluster;
drop table itv.t_fenqun_result_local on cluster czf_cluster;
第三步
-- 仿制分布式表
create table itv.t_fenqun_result_local on cluster czf_cluster as itv.t_fenqun_result_new_local;
-- 创建总表
CREATE TABLE itv.t_fenqun_result AS itv.t_fenqun_result_local ENGINE = Distributed('czf_cluster', 'itv', 't_fenqun_result_local', rand());
-- 插入数据
insert into itv.t_fenqun_result select * from itv.t_fenqun_result_new;