Mysql数据库中表名和数据导入hive数据库中

使用的是shell脚本

sehll 复制代码
#!/bin/bash
#mysql地址
mysql_host="ip地址"
#mysql端口
mysql_port="3306"
#mysql用户名
mysql_user="root"
#mysql密码
mysql_password="root"
#mysql数据库
mysql_database="testdb"
#连接mysql执行sql语句查询所有的表名
mysql -h${mysql_host} -P${mysql_port} -u${mysql_user} -p${mysql_password} -D${mysql_database} -e "select table_name from information_schema.tables where table_schema='${mysql_database}'" > table_name.txt
#table_name.txt中的表名是以table_name开头的,需要将table_name去掉
sed -i 's/table_name//g' table_name.txt
#循环读取表名
for table_name in `cat table_name.txt`
#获取表结构
do
  mysql -h${mysql_host} -P${mysql_port} -u${mysql_user} -p${mysql_password} -D${mysql_database} -e "desc ${table_name}" > structure.txt
  #删除表结构中的第一行
  sed -i '1d' structure.txt
  #获取表的字段类型
  cat structure.txt | awk '{print $2}' > field_type.txt
  #获取表的字段名和字段类型
  cat structure.txt | awk '{print $1,$2}' > field_type_name.txt
  #循环读取字段类型
  for field_type in `cat field_type.txt`
  do
    #删除字段类型的括号和括号中的内容
    fieldType=${field_type//(*}
    #输出字段类型
    echo $fieldType
    sed -i 's/'$field_type'/'$fieldType'/g' field_type_name.txt
    #判断字段类型是否为VARCHAR
    if [ $fieldType = "varchar" ]
    then
      #将字段类型替换为string
      sed -i 's/'$fieldType'/string/g' field_type_name.txt
    fi
    #判断字段类型是否为var
    if [ $fieldType = "var" ]
    then
      #将字段类型替换为string
      sed -i 's/'$fieldType'/string/g' field_type_name.txt
    fi
    #判断字段类型是否为datetime
    if [ $fieldType = "datetime" ]
    then
      #将字段类型替换为timestamp
      sed -i 's/'$fieldType'/string/g' field_type_name.txt
    fi
    #判断字段类型是否为time
    if [ $fieldType = "time" ]
    then
      #将字段类型替换为string
      sed -i 's/'$fieldType'/string/g' field_type_name.txt
    fi
    #判断字段类型是否为timestamp
    if [ $fieldType = "timestamp" ]
    then
      #将字段类型替换为string
      sed -i 's/'$fieldType'/string/g' field_type_name.txt
    fi
  done
  #将修改后的表结构导入到hive中
  #设置插入的sql语句
  sql="create table if not exists ${table_name}("
  #循环读取字段名和字段类型
  while IFS= read -r field_type_name; do
#    echo "$field_type_name"
    # 在这里可以处理每一行内容
    sql=${sql}${field_type_name}","
  done < "field_type_name.txt"
  #删除sql语句中最后一个逗号
  sql=${sql%,*}
  #拼接sql语句
  sql=${sql}")ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;"
  #输出sql语句
  echo $sql
  #执行sql语句
  hive -e "${sql}"

  #使用sqoop将mysql中的数据导入到hive中
  sqoop import --connect jdbc:mysql://${mysql_host}:${mysql_port}/${mysql_database} --username ${mysql_user} --password ${mysql_password} --table ${table_name} --hive-import --hive-table ${table_name} --fields-terminated-by ',' --lines-terminated-by '\n' --hive-overwrite

done
相关推荐
春风霓裳3 小时前
sql-窗口函数
大数据·数据库·sql
言之。3 小时前
【数据库】TiDB 技术选型与架构分析报告
数据库·架构·tidb
人工智能训练3 小时前
如何在 Ubuntu 22.04 中安装 Docker 引擎和 Linux 版 Docker Desktop 桌面软件
linux·运维·服务器·数据库·ubuntu·docker·ai编程
胖头鱼的鱼缸(尹海文)4 小时前
数据库管理-第386期 使用OCP部署OceanBase 4.4.1社区版集群(20251107)
数据库·oceanbase
Craaaayon4 小时前
如何选择两种缓存更新策略(写缓存+异步写库;写数据库+异步更新缓存)
java·数据库·redis·后端·缓存·mybatis
一 乐4 小时前
点餐|智能点餐系统|基于java+ Springboot的动端的点餐系统小程序(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·小程序·论文
WarriorTan4 小时前
理解PostgreSQL中的数据块
数据库·postgresql
学好statistics和DS4 小时前
三个好思路:SQL并行化处理、混淆矩阵和特征交叉
数据库·sql·矩阵
唐僧洗头爱飘柔95275 小时前
【GORM(3)】Go的跨时代ORM框架!—— 数据库连接、配置参数;本文从0开始教会如何配置GORM的数据库
开发语言·数据库·后端·golang·gorm·orm框架·dsn
谅望者5 小时前
在 macOS 上使用 Homebrew 安装 MySQL 8.0 完整指南
数据库·sql·mysql