一. 问题描述
近期需要进行补录数据,需要将hive的历史数据迁移到StarRocks,因为需要补录的数据较多,hive和StarRocks均使用的是分区表,两边的日期格式也不同,hive这边是 yyyymmdd格式,StarRocks这边是yyyy-mm-dd格式。
二. 解决方案
之前一直是使用DataX来从hive导入到StarRocks,因为DataX是单节点的,而hive和StarRocks是分布式的,所以这个性能其实一般,而且DataX配置json确实有点麻烦。
于是尝试使用StarRocks自带的broker load来进行导入,当然此时可以配合shell脚本来使用。
需要从2023-03-01 一直导入到2023-05-30 近90天的数据
#!/bin/bash
#Author : 只是甲 at 20230609
#Remarks : 通过broker load 导入hive 表
# 设置mysql的登录用户名和密码(根据实际情况填写)
mysql_user="root"
mysql_password="passwd"
mysql_host="ip"
mysql_port="9030"
database_name="db_name"
hive_table=hive_table_name
mpp_table=mpp_table_name
for i in {0..90};
do
dt=`date -d "+$i day 2023-03-01" +%Y%m%d`
startdate=`date -d "+$i day 2023-03-01" +%Y-%m-%d`
echo "########$startdate#########"
mysql -h${mysql_host} -P${mysql_port} -u${mysql_user} -p${mysql_password} -D${database_name} << EOF
LOAD LABEL label_${mpp_table}_$dt
(
DATA INFILE("hdfs://ip:8020/hive/warehouse/${hive_table}/dt=${dt}/*")
INTO TABLE ${mpp_table}
FORMAT AS "orc"
(col1, col2, col3, dt)
SET
(
sr_date="$startdate",
col1 = col1,
col2 = col2,
col3 = col3
)
)
WITH BROKER 'broker_1'
(
"hadoop.security.authentication" = "simple",
"username" = "your_username",
"password" = "your_password"
)
PROPERTIES
(
"timeout" = "3600"
);
EOF
done