增加大型数据集的查询性能

时间:2014-12-29 19:04:07

标签: sql hive hiveql

我是HiveSQL的新手。我目前正在查询数据库以提取基于

的数据行
SELECT * FROM database.table WHERE A = '980dsf9sfjklsdfj' AND B = '141519384938' AND C = 'URL'

A --> some id value
B --> timestamp value
c --> url

这些查询需要一段时间才能执行。我想,当向表中添加更多数据时,这些查询可能需要更长时间。我怎样才能加快这个过程?我想也许如果我事先对时间戳值进行排序,它会使查询更快?

2 个答案:

答案 0 :(得分:2)

我也是Hive的新手,但总的来说,你可以通过添加索引来加速这样的查询。您可以在单个字段上添加索引,但通常也可以为多个字段创建组合索引,这样可以在查询这些字段的组合时添加其他性能。

就像你说'排序之前的时间戳值,这基本上就是索引的作用。你可以像这样创建一个索引:

CREATE INDEX idx_table
ON TABLE yourtable (A)
AS 'index.handler.class.name'

或综合指数:

CREATE INDEX idx_table2
ON TABLE yourtable (A, B, C)
AS 'index.handler.class.name'

有关在Hive中创建索引的信息,请阅读此处的文档:

https://cwiki.apache.org/confluence/display/Hive/IndexDev

答案 1 :(得分:1)

你的桌子分区了吗?如果没有,我建议你创建一个新的分区外部表(基于URL)并将数据从旧表加载到新表。您需要在此处使用动态分区。这肯定会提高性能。

此外,根据ID字段的基数,您可能希望根据ID存储数据。