ORC索引如何工作

时间:2015-07-14 17:41:55

标签: indexing orc columnstore

数据库中索引的工作方式:refering the answer from Xenph Yan

  

在表中的字段上创建索引会创建另一个数据结构   它包含字段值,以及指向它所涉及的记录的指针。   然后对此索引结构进行排序,从而允许二进制搜索   在它上面进行。

我理解ORC索引的方式是,ORC保持关于每10'000行(默认情况下)行的统计信息(最小值,最大值,总和),如果我查询数据,它会查看统计信息以确定是否存在需要读取行块。

ORC索引不对数据进行排序是否正确?

我有一个69列的大型表,其中包含非结构化数据,我希望能够对每个列执行即席查询。为此,我希望能够通过索引(或至少大部分)对每列进行排序。数据中没有“关键”列可以快速查询。

2 个答案:

答案 0 :(得分:0)

根据Cloudera support forum

ORC索引有两种形式,即始终创建的标准索引(每列的每个步幅的最小/最大值)和布隆过滤器。

普通索引非常适合范围查询,如果对数据进行排序,则正常工作效果非常好。通常在任何日期列或id之类的递增列上都是自动的。

bloom过滤器非常适合对未排序的数据进行URL,名称等类似查询。 (即,有时客户名称可能会出现在数据中)。

但是,动臂过滤器需要花费一些时间来计算,占用索引中的某些空间并且不能很好地用于数据仓库中的大多数列(诸如利润,销售额等数字字段),因此默认情况下不会创建它们需要为列启用

orc.bloom.filter.columns

跨度大小表示ORC读取器在基于这些索引的读取操作期间可以跳过的数据块。 10000通常是一个很好的数字,增加它并不能帮助您。

http://www.slideshare.net/BenjaminLeonhardi/hive-loading-data

答案 1 :(得分:-1)

Hive被设计为伪(SQL)前端,用于在(大型)数据集上运行(长)批处理作业。您可以运行"即席查询" 但是忘记"快速"

此外,当您索引数据库中的列(即SQL中的CREATE INDEX命令)时,您索引的是每行的完整,准确值。如果您的数据确实是"非结构化" ,那可能毫无意义。

所以...如果您需要的是全文搜索,为什么不将所有数据转储到ElasticSearch或Solr等?