Hive 数据同步ClickHouse

本文探讨了三种将Hive表数据同步到ClickHouse的方法:通过HDFS引擎表、导出CSV文件和使用clickhouse-client直接插入。每种方法都有其优缺点,如HDFS引擎表可能因Hadoop集群压力导致超时,CSV导出适合小数据量但效率低,clickhouse-client方式则依赖于直接读取HDFS数据的主机。选择合适的数据同步策略需根据实际场景权衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:按条件筛选Hive表中的数据同步到ClickHouse中

方法一
按照ClickHouse 官方文档提供的方法,在ClickHouse 中创建HDFS引擎表,读取Hive的数据,将读取的数据插入到ClickHouse本地表中。

缺点
1.需要在clickhouse中创建两张表
2.如果Hadoop集群压力比较大,在读取HDFS数据的时候会出现超时的情况

方法二:
将Hive中的数据导出为csv格式后,加载到clickhouse中。

缺点
1.数据量大的时候导出时间比较长

方法三
在能直接读取HDFS数据的主机上安装clickhouse-client,读取HDFS数据后直接插入ClickHouse。

#!/bin/bash
#######################################
#  功能:同步hdfs数据到clickhouse
#  usage:sh  shell_name  table_name
#######################################

current_dir=$(cd `dirname $0`; pwd)

# 获取Hive表在HDFS上的存储路径
table_name=$1
input_file=`hadoop fs -ls  /warehouse/tablespace/hive/db01/${table_name}/*/*|awk '{print $8}'>${current_dir}/input_file.txt`

# 定义Clickhouse 数据源连接
ch="clickhouse-client -h 172.18.xxx.xxx  --port 9090 -u xxx --password xxx --query "

# 将Hive存储在Hdfs上的数据同步到clickhouse
for i in `cat ${current_dir}/${input_file}`
do
   echo `date +"%Y-%m-%d %H:%m:%S"`  '开始执行 .....' $i
   hadoop fs -text $i|${ch} "insert into xxx.xxx  format CSV" 
   echo `date +"%Y-%m-%d %H:%m:%S"`  '结束执行 .....' $i
done
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值