首页 > 数据库 > SQL on Hadoop > hive ORC表数据插入
hive ORC表的数据不能通过hive客户端load数据文件加载,也不能使用hdfs dfs -put上传到对应目录,只能通过insert into orc_table select * from tmp方式插入数据;
由于select * from tmp查询子句的灵活性,orc表数据插入有很多方式可以选择,如hive客户端分别指定order by、distribute by、sort by、 distribute by+sort by、cluster by或者通过trafodion访问hive表进行数据加载;
insert into orders_orc_idx_f11 select * from orders order by o_orderkey ; -- orders_orc_idx_f11:带行组索引的orc表;order:普通textfile表
通过指定order by进行数据加载,对数据进行全局排序,只能1个reduce中进行处理,所以hdfs对应表目录下生成1个数据文件,在相同数据量下,指定order by插入数据性能比以下几种方式慢;
insert into orders_orc_idx_f11 select * from orders sort by o_orderkey ; -- orders_orc_idx_f11:带行组索引的orc表;order:普通textfile表
通过指定sort by进行数据加载,单独在各自的reduce中进行排序,所以并不能保证全局有序,即hdfs下的每个数据文件内部是有序的,但所有数据文件合起来不是有序的;如果指定reduce为1个(set mapred.reduce.tasks = 1),则sort by和order by是一样的;
insert into orders_orc_idx_f11 select * from orders distribute by O_ORDERSTATUS; -- orders_orc_idx_f11:带行组索引的orc表;order:普通textfile表;O_ORDERSTATUS表uec值为3;reduce值为26
通过指定distribute by进行数据加载,distribute by是控制map中的输出到reduce中是如何进行划分的,即按照distribute by指定字段的值进行hash计算,然后除以reduce值取余,结果相同的分配给同一个reduce处理,如果数据uec值低与reduce的值,hdfs存储的数据文件大小会不均匀,对查询这样的数据插入到其他表性能有影响;但对查询性能不影响(因为看似各个数据分布不均匀,但hdfs系统整合的是全部的磁盘,数据文件存储在磁盘是均匀的,不会影响到查询扫描速度);
insert into orders_orc_idx_f11 select * from orders distribute by O_ORDERSTATUS sort by o_orderkey ; -- orders_orc_idx_f11:带行组索引的orc表;order:普通textfile表
通过指定distribute by+order by进行数据加载,将map中的输出在reduce中进行划分,然后每个reduce进行排序(参考各自的特性理解);
insert into orders_orc_idx_f11 select * from orders cluster by O_ORDERSTATUS ; -- orders_orc_idx_f11:带行组索引的orc表;order:普通textfile表
通过指定 cluster by进行数据加载,distribute by和sort by合用就相当于cluster by,但是cluster by不能指定排序为asc或desc的规则,只能是升序排列;
insert into hive.hive.orders_orc_idx_f11 select * from hive.hive.orders; -- orders_orc_idx_f11:带行组索引的orc表;order:普通textfile表
通过trafodiong访问hive表进行数据加载,不管hive客户端创建表的时候是否指定了行组索引('orc.create.index'='true'),数据加载后查看hdfs下的数据文件的元数据,都是包含最小值、最大值、和等信息,在这种情况下,不带行组索引的表和带行组索引的表数据存储是一样的,查询效率也相同;
附录:
行组索引:http://blog.itpub.net/69985104/viewspace-2758737/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69985104/viewspace-2758770/ ,如需转载,请注明出处,否则将追究法律责任。