sqoop将hive数据导出到关系型数据库
以下信息,只要根据自己的数据库的相应信息修改以下,即可,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