将Hive中的查询结果导出到关系型数据库

将Hive中的数据导入到关系型数据库有多种方式

本地文件

1、将Hive查询结果导出到本地文件

1
2
3
4
5
6
7
INSERT OVERWRITE LOCAL DIRECTORY '/root/result'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
SELECT
xh, xm, xb
FROM
gdm.student

2、将本地文件导入到数据库
PostgreSQL

1
2
3
4
5
6
7
psql -h 127.0.0.1 -p 5432 -d bigdata --username=gpadmin -c "
TRUNCATE app.student;
COPY app.student(xh, xm, xb)
FROM '/root/result/000000_0'
WITH
DELIMITER '\t';
"

MySQL

1
2
3
4
5
6
7
8
mysql -h 127.0.0.1 -P3306 -u root -p 123456 --local-infile=1 -e "
SET NAMES utf8;
TRUNCATE app.student;
LOAD DATA LOCAL INFILE '/root/result/000000_0'
INTO TABLE app.student(xh, xm, xb)
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n';
"

自定义函数

Hive的contrib包提供了一个UDF可以把查询结果插入到数据库

1
2
3
CREATE TEMPORARY FUNCTION dboutput AS 'org.apache.hadoop.hive.contrib.genericudf.example.GenericUDFDBOutput';

SELECT dboutput('jdbc:postgresql://127.0.0.1/pgadmin', 'pgadmin', '123456', 'INSERT INTO app.student(xh, xm, xb) VALUES(?,?,?)', xh, xm, xb) FROM gdm.student

注: 此方式会把查询结果一行行的往数据库插入,效率上比本地文件方式要低很多

  • 本文作者: Harmel
  • 本文链接: http://www.harmel.cn/2018/09/hive-to-db.html
  • 版权声明: 文章如无特别说明,则表明该文章为原创文章,如需要转载,请注明出处。
  • 本站说明: 本站使用阿里云服务器,如果您喜欢我的网站,欢迎收藏,能捐赠支持一下就再好不过了。