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
相关推荐
亚历克斯神4 分钟前
Flutter for OpenHarmony: Flutter 三方库 mutex 为鸿蒙异步任务提供可靠的临界资源互斥锁(并发安全基石)
android·数据库·安全·flutter·华为·harmonyos
IAUTOMOBILE16 分钟前
用Python批量处理Excel和CSV文件
jvm·数据库·python
常利兵42 分钟前
Spring项目新姿势:Lambda封装Service调用,告别繁琐注入!
java·数据库·spring
liqianpin11 小时前
MySQL官网驱动下载(jar包驱动和ODBC驱动)【详细教程】
数据库·mysql
想唱rap1 小时前
Linux线程
java·linux·运维·服务器·开发语言·mysql
kgduu2 小时前
js之客户端存储
javascript·数据库·oracle
light blue bird2 小时前
原生控件GDI完成作业协同界面
jvm·数据库·.net·winform·gdi+界面
聊点儿技术2 小时前
利用IP归属地查询识别异地登录风险:企业账号安全的技术探索
数据库·tcp/ip·安全
Ricky_Theseus2 小时前
SQL Server 的五种约束类型
数据库·sql·oracle
zjshuster2 小时前
数据库分库分表的方法论与实操
数据库·adb