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
相关推荐
HaiFan.6 分钟前
SpringBoot 事务
java·数据库·spring boot·sql·mysql
水根LP499 分钟前
linux系统上SQLPLUS的重“大”发现
数据库·oracle
途途途途37 分钟前
精选9个自动化任务的Python脚本精选
数据库·python·自动化
04Koi.1 小时前
Redis--常用数据结构和编码方式
数据库·redis·缓存
silver98861 小时前
mongodb和Cassandra
数据库
PersistJiao1 小时前
3.基于 Temporal 的 Couchbase 动态 SQL 执行场景
数据库·sql
上山的月2 小时前
MySQL -函数和约束
数据库·mysql
zhcf2 小时前
【MySQL】十三,关于MySQL的全文索引
数据库·mysql
极限实验室2 小时前
Easysearch Chart Admin 密码自定义
数据库
丁总学Java2 小时前
要查询 `user` 表中 `we_chat_open_id` 列不为空的用户数量
数据库·mysql