ITPub博客

首页 > 数据库 > SQL on Hadoop > trafodion访问hive orc 行组索引性能情况

trafodion访问hive orc 行组索引性能情况

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

        在之前的博客介绍了不同方式将textfile的hive表数据加载到orc表中,本篇介绍不同数据加载方式,对trafodion访问orc表的性能影响;

        hive orc表数据加载: http://blog.itpub.net/69985104/viewspace-2758770/

        hive reduce计算: http://blog.itpub.net/69985104/viewspace-2758770/

        hive orc行组索引: http://blog.itpub.net/69985104/viewspace-2758737/

一、测试记录:

1、创建orders表作为源数据表,并添加1500万数据(数据来自tpch脚本生成)

CREATE TABLE orders2 (
  O_ORDERKEY int ,
  O_CUSTKEY int ,
  O_ORDERSTATUS char(1) ,
  O_TOTALPRICE decimal(15,2) ,
  O_ORDERDATE date ,
  O_ORDERPRIORITY char(15) ,
  O_CLERK char(15) ,
  O_SHIPPRIORITY int ,
  O_COMMENT varchar(79)  
)row format delimited fields terminated by '|'
;

2、创建orc行组索引表和非行组索引表

CREATE TABLE orders_orc_idx_f1 (
O_ORDERKEY int ,
O_CUSTKEY int ,
O_ORDERSTATUS char(1) ,
O_TOTALPRICE decimal(15,2) ,
O_ORDERDATE date ,
O_ORDERPRIORITY char(15) ,
O_CLERK char(15) ,
O_SHIPPRIORITY int ,
O_COMMENT varchar(79)  
)STORED AS ORC TBLPROPERTIES('orc.create.index'='true'); -- 行组索引表
CREATE TABLE orders_orc_nidx_f1 (
O_ORDERKEY int ,
O_CUSTKEY int ,
O_ORDERSTATUS char(1) ,
O_TOTALPRICE decimal(15,2) ,
O_ORDERDATE date ,
O_ORDERPRIORITY char(15) ,
O_CLERK char(15) ,
O_SHIPPRIORITY int ,
O_COMMENT varchar(79)  
)STORED AS ORC TBLPROPERTIES('orc.create.index'='false'); -- 非行组索引表

3、数据加载

        hive客户端分别指定order by、distribute by、sort by、 distribute by+sort by、cluster by或者通过trafodion访问hive表进行数据加载

4、安装精确查询和分析场景查询

select * from hive.hive.orders_orc_idx_f1 where o_orderkey = 100; -- 精确查询语句
select max(O_ORDERKEY),O_ORDERSTATUS from hive.hive.orders_orc_idx_f1 group by 2; -- 分析场景查询语句

二、测试结果:

        hive客户端数据加载:

                1、精确查询场景下, 带行组索引的orc表性能优于不带行组索引的orc表;

                2、带有行组索引的orc表,底层有1个文件还是28个文件,trafci对精确查询影响不大,因为都只扫描了10000条数据;

                3、带有行组索引的orc表,底层有1个文件还是28个文件,trafci对分析场景查询有影响,查询是全表扫描,但28个文件的查询性能好与1个文件,因为全表扫描时,hdfs多个文件并发比单个文件的并发高;

                4、hive客户端,指定distribute、sort或者两者组合插入,hdfs都是26个文件,指定order by插入,hdfs生成1个数据文件;trafci客户端指定order by插入是按照28个esp生成28个数据文件;

                5、按照分组列O_ORDERSTATUS指定distribute、sort、distribute+sort插入,trafci对分析场景查询性能影响不大,都是全表扫描;

                        但是插入时指定distribute的性能比未指定distribute的性能差;因为O_ORDERSTATUS指定distribute插入数据时,O_ORDERSTATUS数据UEC低与reduce数,不能均匀分布到hdfs下个各个数据文件,某些数据文件插入是分配过多数据造成数据插入性能比较差;

        trafci客户端数据加载:

                1、 精确查询场景下, 带行组索引的orc表与 不带行组索引的orc表性能一致;

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

请登录后发表评论 登录
全部评论

注册时间:2020-10-09

  • 博文量
    74
  • 访问量
    31011