ClickHouse迁移Starrocks脚本工具

使用方法:执行sh process_inspect_event_dist.sh

bash 复制代码
#!/bin/bash


# 表名 分区字段 分区
sh export.sh m_event "toYYYYMM(operation_time)" 202509

# 表名 分区 表内字段
sh import.sh m_event 202509 batch_id,business_type,tenant_id,create_time 

先导出ClickHouse数据至CSV文件:

bash 复制代码
#!/bin/bash

# 定义表名数组
tables=("$1")
partition="$2"
dt=$3

# 定义IP地址数组
ips=(
    "198.0.0.1"
    "198.0.0.2"
)

# 清理csv文件
rm -rf /data1/export/out* 

if [ "$1" = "" ]; then
    echo "错误: table name变量未设置"
    exit 1
fi

if [ "$2" = "" ]; then
    echo "错误: partition变量未设置"
    exit 1
fi

if [ "$dt" = "" ]; then
    echo "错误: dt变量未设置"
    exit 1
fi

echo "Export for dt $dt:"

# 循环遍历每张表
for table in "${tables[@]}"; do
    echo "Processing table: $table"
    
    # 循环遍历每个IP地址
    for i in "${!ips[@]}"; do
        ip=${ips[$i]}
        echo "Executing query on IP: $ip"
        
        # 构建输出文件名
        output_file="out-${table}-$dt-$((i+1)).csv"
        
        # 执行ClickHouse查询并将结果保存到CSV文件
        clickhouse-client -h "$ip" -u admin --password 123456 -m --query "SELECT * FROM test.$table WHERE $2 = '$3'  ;" > "$output_file"
        
        # 检查命令是否成功
        if [ $? -eq 0 ]; then
            echo "Query executed successfully. Output saved to $output_file"
        else
            echo "Failed to execute query on IP: $ip"
        fi
    done
    
    echo "Finished processing table: $table"
    echo "----------------------------------------"
done

echo "All queries have been executed."

然后导入StarRocks中:

bash 复制代码
#!/bin/bash

# StarRocks Stream Load配置
USER="root"
PASSWORD="123456"
HOST="192.168.0.3"
PORT="8030"
DATABASE="test"
TABLE="$1"

dt=$2

# 列定义
COLUMNS="$3"

# 文件列表(按数字顺序排序)
FILES=(
"out-$1-$dt-1.csv"
)

# 创建日志目录
LOG_DIR="/data1/export"

if [ "$1" = "" ]; then
    echo "错误: table name变量未设置"
    exit 1
fi

if [ "$dt" = "" ]; then
    echo "错误: dt变量未设置"
    exit 1
fi

if [ "$3" = "" ]; then
    echo "错误: columns变量未设置"
    exit 1
fi

# 遍历所有文件并执行Stream Load
for FILE in "${FILES[@]}"; do
  # 检查文件是否存在
  if [ ! -f "$FILE" ]; then
    echo "文件 $FILE 不存在,跳过..."
    continue
  fi

  # 生成唯一label(带时间戳)
  TIMESTAMP=$(date +%Y%m%d%H%M%S)
  LABEL="load_${FILE%.*}_$TIMESTAMP"

  # 输出当前处理信息
  echo "正在处理文件: $FILE (Label: $LABEL)"
  echo "文件大小: $(du -h "$FILE" | cut -f1)"

  # 执行Stream Load
  START_TIME=$(date +%s)
  
  curl --location-trusted -u "$USER:$PASSWORD" \
    -H "label:$LABEL" \
    -H "column_separator:	" \
    -H "columns:$COLUMNS" \
    -T "$FILE" -XPUT \
    "http://$HOST:$PORT/api/$DATABASE/$TABLE/_stream_load" > "$LOG_DIR/${LABEL}.log" 2>&1

  # 检查curl命令执行结果
  CURL_EXIT_CODE=$?
  END_TIME=$(date +%s)
  DURATION=$((END_TIME - START_TIME))

  if [ $CURL_EXIT_CODE -eq 0 ]; then
    # 解析响应日志检查是否成功
    if grep -q '"Status": "Success"' "$LOG_DIR/${LABEL}.log"; then
      echo "成功导入 $FILE (耗时: ${DURATION}秒)"
      # 可选:导入成功后移动或删除文件
      # mv "$FILE" "processed/$FILE"
    else
      echo "导入 $FILE 失败,请查看日志: $LOG_DIR/${LABEL}.log"
    fi
  else
    echo "执行curl命令失败 (退出码: $CURL_EXIT_CODE),文件: $FILE"
  fi

  # 避免短时间内发送过多请求(根据需要调整)
  sleep 2
done

echo "所有文件处理完成。日志保存在 $LOG_DIR 目录中。"
相关推荐
StarRocks_labs3 天前
当大模型调用进入执行引擎:StarRocks AI Function 全新能力解析
数据库·starrocks·sql·ai·pipeline·数据处理·join
ClickHouseDB4 天前
基于 OpenTelemetry 的意式浓缩咖啡机可观测性实践
clickhouse
l1t6 天前
DeepSeek总结的chdb-core v26.7.3发版说明
数据库·clickhouse·oracle
智码看视界6 天前
大数据架构深度解析:StarRocks 实时数仓搭建:比 ClickHouse 更适合多维分析的场景
大数据·starrocks·olap·数据建模·列式存储·clickhouse对比
SelectDB技术团队8 天前
从 ClickHouse 迁移到 Doris:SQL 兼容、同步与验证清单
数据库·人工智能·sql·clickhouse·apache doris·selectdb·湖仓架构升级
java_logo10 天前
Docker 部署 ClickHouse Server:轻松搭建列式 OLAP 分析数据库平台
数据库·clickhouse·docker·私有化部署·olap·列式数据库·轩辕镜像
西风未眠14 天前
ClickHouse数据库引擎引起的数据丢失
数据库·clickhouse·故障
StarRocks_labs14 天前
StarRocks 如何查询 Paimon 半结构化数据?Variant、Shredding 与 SQL 实践
starrocks·sql·paimon·variant·shredding
李兆龙的博客16 天前
从一到无穷大 #86:ClickHouse 收购 RunReveal——可观测性竞争进入宏观调控阶段
clickhouse
StarRocks_labs20 天前
StarRocks × Fluss × Paimon:流湖仓分析与 ETL 闭环
starrocks·flink·jni·native·paimon·湖仓·fluss