ORC索引是如何工作的



数据库索引的工作方式:参考Xenph Yan的回答

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

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

那么ORC索引不排序数据是正确的吗?

我有一个69列的大表非常非结构化的数据,我希望能够对每一列执行临时查询。为此,我希望能够通过索引对每一列进行排序(或者至少对其中的大部分)。在快速查询的数据中没有'key'列

根据Cloudera支持论坛:

ORC索引有两种形式,一种是一直创建的标准索引(每个列的每个步的最小/最大值),另一种是Bloom过滤器。

普通索引对于范围查询很好,如果数据是排序的,则工作得非常好。这通常在任何日期列或递增列(如id)上自动执行。

Bloom过滤器对于url、名称等未排序数据的相等性查询非常有用。(例如,有时数据中可能会出现客户名称)。

然而,Bloom过滤器需要一些时间来计算,在索引中占用一些空间,并且不适合数据仓库中的大多数列(数字字段,如利润,销售等)。因此,它们不是默认创建的,需要为列启用:

orc.bloom.filter.columns

跨步大小是指在基于这些索引的读操作期间,ORC阅读器可以跳过的数据块。10000通常是一个很好的数字,再增加也没有多大帮助。

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

Hive被设计成一个伪sql前端,用于在(海量)数据集上运行(长)批处理作业。您可以运行"特设查询",但忘记"快速"

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

所以…如果你需要的是全文搜索,为什么不把你所有的数据转储在ElasticSearch或Solr之类的东西中呢?

相关内容

  • 没有找到相关文章

最新更新