我对在生产中使用Hadoop还比较新手。我使用scoop将来自数据库的大型表格导入到Hive中。scoop创建了一个逗号分隔的文本文件,并在Hive中创建了相应的表。
然后我执行了以下语句:create table new_table_orc stored as orc as select * from old_table_csv
由于与ORC(二进制数据,针对大型表的列式数据存储,压缩等)相比,文本文件的效率要低得多,我期望能获得巨大的、数量级上的改进,但是查询执行时间似乎并没有改变!
我在两个版本(文本、ORC甚至是parquet)上都使用了相同的简单查询,并在多个这些表格用于联接时使用了相同的方法。
附加信息: 我正在测试的主要表格大约有4.3亿行和50列。
我运行了几个查询:
select sum(col1) from my_table;
<= 40 秒
select sum(col1) from my_table_orc;
<= 31 秒
以及
select distinct col2 from my_table where col3 = someval;
<= 53 秒
select distinct col2 from my_table_orc where col3 = someval;
<= 35 秒
我还启用了向量化,就像@sahil desai建议的那样,但似乎并没有产生很大的差异(它只减少了几秒钟的时间)。
到底是怎么回事?为什么我看不到数量级的加速?你还需要更多的详细信息吗?