使用的是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