阅读 161

hive orc表'orc.create.index'='true'与'orc.create.index'='false'

hive orc表'orc.create.index'='true'与'orc.create.index'='false'

hive ORC文件存储格式是以列存的方式,在查询表中少数列数据,不必要去查询没条数据的所有字段;但是如果一个列的值全部存储一起,查询一个列的一条数据,会将整个表该列的所有数据都查询出来,如果数据量很大,查询速度依然很慢;然后引入orc.create.index(行组索引),行组索引就能解决以上的问题;

概念解释:

行组索引:

如下图:

        表一为传统数据存储,按行存储,如果没有存储索引的话,查询一个字段,需要把整行查询出来;

        表二为orc行组索引,首先数据按照列存方式存储,然后按照一个单位值(10000行)组成一个行组,查询时,在orc的 每个行组索引的元数据(元数据 记录了行组下每个列的最小值、最大值、和等信息)匹配查询条件,数据查询扫描对应的行组,从而达到优化查询的目录;

        非行组索引的orc表,则orc元数据没有 每个列的最小值、最大值、和等信息,查询时,数据扫描会进行全表扫描,不能达到查询优化的目的;


常见orc建表语句如下:

1
2
3
4
5
6
7
8
9
10
CREATE TABLE T (C1 INT,C2 INT)STORED AS ORC; 
-- 创建带有行组索引的orc空表(默认情况下创建orc表,是带有orc.create.index=true属性的)
CREATE TABLE T (C1 INT,C2 INT)STORED AS ORC TBLPROPERTIES('orc.create.index'='true');
-- 创建带有行组索引的orc空表
CREATE TABLE T (C1 INT,C2 INT)STORED AS ORC TBLPROPERTIES('orc.create.index'='false');
-- 创建不带有行组索引的orc空表
create TABLE T stored AS ORC TBLPROPERTIES('orc.create.index'='true'as select from T_TMP;
-- 创建带有行组索引的orc表,如果T_TMP有数据,创建T表时也会进行数据加载
create TABLE T stored AS ORC TBLPROPERTIES('orc.create.index'='false'as select from T_TMP;
-- 创建不带有行组索引的orc表,如果T_TMP有数据,创建T表时也会进行数据加载



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69985104/viewspace-2758737/,如需转载,请注明出处,否则将追究法律责任。


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐