sqoop将hive数据导出到关系型数据库

醉酒当歌 提交于 2019-12-06 02:11:25

以下信息,只要根据自己的数据库的相应信息修改以下,即可,sqoop其实就是很简单的,一般hive数据存储为列式存储,所以要提前把要写到关系型数据库的数据写到一个text后缀的表里,然后才能导出到关系型数据库中。

还要特别注意写到关系型数据库中数据的格式要一一对应

#pg库相关信息

database_connection="jdbc:postgresql://192.168.0.2:8080/db_name"
database_username="user" 
database_password="pass" 
databaseTableName="test2"
databaseColums="a1,a2,a3"

 

#将数据写到一个临时表中hive -v -e "
set mapred.job.queue.name=${queueName};

USE hive_db_name;
INSERT OVERWRITE TABLE test3

select a1,a2,a3 from test1 where y='2019' and m='11' and d='29';
";

if [[ $? != 0 ]]; then
print_log "hive执行失败!"
exit 1
fi

#hdfs路径
exportHdfsPath="hdfs://hdfs01-shyp-cx/hive_db_name/test3"

sqoop export -Dmapred.job.queue.name=$queueName \   //mr的队列
--connect $database_connection \        //关系型数据库的连接
--username $database_username \      //关系型数据库的用户名
--password $database_password \      //关系型数据的密码
--export-dir $exportHdfsPath \              //hive表的hdfs路径
--verbose \
--table $databaseTableName \          //要写到的表名
--columns $databaseColums \          //要写过去的字段名
--input-fields-terminated-by '\001' \   //hive表的分割符,注意表一定是行式存储的表才能导出,一般是text后缀的表
--input-lines-terminated-by '\n' \       //每行的分割符
--input-null-string '\\N' \                    //空值处理
--input-null-non-string '\\N'               //空值处理

if [[ $? != 0 ]]; then
print_log "sqoop导出失败!"
exit 1
fi

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!