ITPub博客

首页 > 数据库 > SQL on Hadoop > hive orc表'orc.create.index'='true'与'orc.create.index'='false'

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

原创 SQL on Hadoop 作者:joshliu 时间:2021-02-23 16:15:56 0 删除 编辑

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

概念解释:

行组索引:

如下图:

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

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

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


常见orc建表语句如下:

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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: EsgynDB之Bulkload
请登录后发表评论 登录
全部评论

注册时间:2020-10-09

  • 博文量
    74
  • 访问量
    28725