使用shell脚本读elasticsearch,写msyql

时间:2025-03-01 12:09:37
#!/bin/bash # 配置 Elasticsearch 和 MySQL 连接信息 ES_HOST="http://localhost:9200" ES_INDEX="your_index" ES_QUERY='{ "query": { "match_all": {} }, "size": 1000 }' # 每次查询1000条 MYSQL_HOST="localhost" MYSQL_USER="root" MYSQL_PASS="your_password" MYSQL_DB="your_database" MYSQL_TABLE="your_table" # 从 Elasticsearch 读取数据 read_es_data() { curl -s -XGET "$ES_HOST/$ES_INDEX/_search" \ -H 'Content-Type: application/json' \ -d "$ES_QUERY" | jq -c '.hits.hits[]._source' } # 写入 MySQL write_to_mysql() { local json_data="$1" # 提取字段(根据实际JSON结构调整) id=$(echo "$json_data" | jq -r '.id') name=$(echo "$json_data" | jq -r '.name') timestamp=$(echo "$json_data" | jq -r '.timestamp // "NULL"') # 处理空值 # 构建 SQL 语句 mysql -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PASS" "$MYSQL_DB" <<EOF INSERT INTO $MYSQL_TABLE (id, name, timestamp) VALUES ($id, '$name', FROM_UNIXTIME($timestamp)); EOF } # 主流程 main() { # 读取 ES 数据 data=$(read_es_data) total=$(echo "$data" | wc -l) current=0 # 逐条处理 echo "$data" | while read -r line; do write_to_mysql "$line" ((current++)) # 显示进度条 echo -ne "进度: [$((current * 100 / total))%]\r" done echo -e "\n导入完成!共导入 $total 条数据" } main