阅读了查询优化技术后,我了解了以下技术。
1. Indexing - bitmap and BTree
2. Partitioning
3. Bucketing
我得到了分区和存储分区以及何时使用它们的区别,但是我仍然对索引的实际工作方式感到困惑。索引的元数据存储在哪里?是存储它的namenode吗?即,实际上,在创建分区或存储桶时,我们可以在hdfs中看到多个目录,这些目录解释了查询性能的优化,但是如何可视化索引呢?尽管存在分区和存储桶,但它们是否真的在现实生活中使用?
请帮助我进行上述查询,Hadoop和Hive开发人员社区是否有专门的页面?
但是ORC中有轻量级的索引(嗯,实际上不是经典索引,而是min,max和Bloom过滤器,它有助于修剪条带)。 ORC索引也是最有效的,因为数据是在插入(distribute + sort)时进行排序的]
如果分区模式与表的过滤方式或加载方式相对应,则分区效率最高(如果增量数据是整个分区,则可以并行加载分区,如果增量数据有效,则可以工作)。]]] >
括弧可以帮助优化联接和分组方式,但是sort-merge-bucket-mapjoin具有严重的限制,因此效率也不高。这两个表应具有相同的存储架构,在现实生活中这是罕见的,或者效率极低。加载存储区时,数据也应排序。
考虑将ORC与内置索引和Bloom过滤器一起使用,请在表中保留较少数量的文件,以避免元数据过载,并避免映射器复制数千个文件。阅读此partitions in hive interview questions和此Sorted Table in Hive
有用的链接。
官方文档:LanguageManual
Cloudera社区:https://community.cloudera.com/