在讨论Hive优化之前,我们先介绍两个关键字‘EXPLAIN’和‘EXPLAIN EXTENDED’,在碰到复杂或者执行效率很低的查询时,在查询与居前加上这个关键字,此时这个查询不会执行,而是返回hive是如何去执行这个查询,hive会把查询分解成很多stage。理解这些stage可以帮助我们优化查询。
举个栗子:
EXPLAIN SELECT length(str_tel), str_tel FROM tmp_dataclean.tbl_fin_combine_protest ORDER BY length(str_tel);
1.优化之分区
对数据进行分区,可以将数据以一种符合逻辑的方式进行组织(比如分层存储),同时极大提高查询性能。
在创建表的时候,根据后续查询需求用'PARTITIOED BY( )'对数据进行合理的分区,下面我们根据‘province’和‘city’进行对数据进行分区分区:
CREATE TABLE IF NOT EXISTS tbl_per_info (no INT, name STRING, sex STRING, age INT, salary FLAOT) PARTITIONED BY (province STRING, city STRING);
'province'和'city'已经在文件目录名称中了,不需要再把这些值放在目录下的文件中,浪费空间。当我们需要查询在山东德州的员工个人信息时:
SELECT * FROM tbl_