`
flyingdutchman
  • 浏览: 359040 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

深入学习《Programing Hive》:HiveQL索引

    博客分类:
  • Hive
阅读更多
        Hive提供有限的索引功能,这不像传统的关系型数据库那样有“键(key)”的概念,用户可以在某些列上创建索引来加速某些操作,给一个表创建的索引数据被保存在另外的表中。
        Hive的索引功能现在还相对较晚,提供的选项还较少。但是,索引被设计为可使用内置的可插拔的java代码来定制,用户可以扩展这个功能来满足自己的需求。
        当然不是说有的查询都会受惠于Hive索引。用户可以使用EXPLAIN语法来分析HiveQL语句是否可以使用索引来提升用户查询的性能。像RDBMS中的索引一样,需要评估索引创建的是否合理,毕竟,索引需要更多的磁盘空间,并且创建维护索引也会有一定的代价。
        用户必须要权衡从索引得到的好处和代价。
       
        创建索引
        现在让我们来为分区表employees创建一个索引。首先,然我们再回顾一下employees东侧表定义:
              CREATE TABLE employees (
                name           STRING,
                salary         FLOAT,
                subordinates   ARRAY<STRING>,
                deductions     MAP<STRING,FLOAT>,
                address        STRUCT<street:STRING,city:STRING,state:STRING,zip:INT>
              ) PARTITIONED BY (country STRING,state STRING);
        

        接着让我们看看如何为该表的contry分区创建索引:
              CREATE INDEX employees_index
              ON TABLE employees (country)
              AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
              WITH DEFERRED REBUILD
              IDXPROPERTIES ('creator' = 'me','created_at' = 'some_time')
              IN TABLE employees_index_table
              PARTITIONED BY (country,name)
              COMMENT 'Employees indexed by country and name.';
        

        在本示例中,在employees上创建了名为employees_index的索引,索引数据存放在employees_index_table索引表中,WITH DEFERRED REBUILD表明创建一个空索引,可以在之后使用如下语句创建索引数据:
              ALTER INDEX employees_index ON TABLE employees 
              PARTITION(country = 'US')
              REBUILD;
        

PARTITIONED BY表明只对某个分区创建索引,若没有该选项则表示对所有分区都创建索引,另外要注意的是index的分区索引默认是和表的分区一致的,也不能对视图VIEW创建索引。AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'表示使用Apache的org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler作为创建索引的handler,当然也可以使用第三方的实现类或其他的实现类。
        当然也可以对其他字段创建索引。 

        Bitmap位图索引
        Hive v0.80添加了一个内置的bitmap位图索引。Bitmap位图索引通常适用于只有少数不同值的列创建索引。现在我们修改上一个索引示例为位图索引:
              CREATE INDEX employees_index
              ON TABLE employees (country)
              AS 'BITMAP'
              WITH DEFERRED REBUILD
              IDXPROPERTIES ('creator' = 'me','created_at' = 'some_time')
              IN TABLE employees_index_table
              PARTITIONED BY (country,name)
              COMMENT 'Employees indexed by country and name.';
        

        
        重建索引
        如果用户在创建索引时指定WITH DEFERRED REBUILD关键字,那么开始时是一个空索引。我们在任何时候使用ALTER INDEX语句来创建或重建索引:
              ALTER INDEX employees_index ON TABLE employees 
              PARTITION(country = 'US')
              REBUILD;
        

        Hive没有提供一个内置的在数据变更时自动触发创建索引的机制,故用户需要自己通过ALTER INDEX语句来创建索引;另外,重建索引操作是一个原子操作,因此当rebuild失败时,已构建的索引也无法使用。

        查看索引
        用户可以查看某个表上的所有的索引:
              SHOW FORMATTED INDEX ON employees;
              SHOW FORMATTED INDEXES ON employees;
        


        删除索引
        在删除一个索引的时候,也会同时删除索引数据所在的表,如:
              DROP INDEX IF EXISTS employees_index ON TABLE employees;
        

        当然,在删除一个带有索引的表时,索引数据和索引表也会被删除。  
分享到:
评论

相关推荐

    HIVE编程指南

    HIVE编程指南中文版,是由programing hive翻译过来

    Programing1:编程的最终评估1

    下面我们将深入探讨这个评估可能涉及的一些关键知识点。 首先,基础编程语言的语法是必不可少的。无论是Python、Java、C++还是其他语言,掌握变量定义、数据类型(如整型、浮点型、字符串、布尔型等)、控制流程...

    leetcode手册JAVA-test-programing-:测试-编程-

    只要它可以帮助正在学习新算法的人,它是否从某个地方复制并不重要。 图形示例也将非常有帮助。 不要忘记包括测试。 不要删除以前的算法实现。 只需使用您自己的实现添加一个新文件。 美化和清理您的代码以便于阅读...

    Hive编程中文版

    Hive编程指南中文版翻译,Hive programing

    hive-programing

    直线-u'jdbc:hive2:// headnodehost:10001 /; transportMode = http'-f demo.hql #this用于将txt文件存储在azure中 直线-u'jdbc:hive2:// headnodehost:10001 /; transportMode = ...

    Programing with MFC Programing with MFC

    《Programming with MFC》是关于Microsoft Foundation Classes (MFC) 的编程指南,MFC 是微软为Windows应用程序开发提供的...通过深入学习MFC,开发者可以更好地理解和控制Windows应用程序的生命周期,提高开发效率。

    c++ programing and c

    c++ programingc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ ...

    programing-GIS:代码和笔记本

    通过深入研究这个"programing-GIS:代码和笔记本",学习者不仅可以掌握GIS编程的基本技能,还能了解如何将这些技能应用于实际问题,比如城市规划、环境保护、交通分析等领域。这将是一个宝贵的学习资源,帮助开发者将...

    Python-programing:Python代码

    以上只是Python编程中的一些基础知识点,Python的生态庞大,还有更多高级特性和框架,如网络编程、并发处理、网络爬虫、机器学习、深度学习等,都需要进一步深入学习。Python-programing-main这个压缩包可能包含了...

    web-programing:belajar tentang membuat网站sederhana

    在本课程"web-programing: belajar tentang membuat网站sederhana"中,我们将探索构建简单网站的基本步骤,主要关注CSS这一关键技术。首先,我们需要理解网站的构成元素,包括HTML、CSS以及JavaScript,它们共同构成...

    牛客的代码leetcode代码区别-common_programing:common_programing

    本项目“牛客的代码leetcode代码区别-common_programing”似乎是为了对比和整理在牛客网上与LeetCode上的编程题目解法。通过对这些代码的分析,我们可以深入理解不同平台上的解题策略、代码风格以及可能存在的差异。...

    visualization-programing:这是个人毕业设计

    在"visualization-programing:这是个人毕业设计"项目中,我们可以推测这是一个使用TypeScript语言实现的可视化编程工具或平台。 TypeScript是JavaScript的一个超集,由微软开发,旨在提供静态类型检查、类和模块等...

    Algorithm-competitive-programing.zip

    "Algorithm-competitive-programming.zip"这个压缩包文件,显然是为了帮助学习者深入理解和掌握算法以及如何在竞争编程中运用它们。让我们一起探讨其中蕴含的知识点。 1. **算法基础**:算法是一系列精确的步骤,...

    Competitive-Programing:来自各种在线平台的问题解决方案

    竞争性编程问题入门JavaScript 要运行js文件,请取消注释必需的软件包。安装依赖项npm install node filename.js Python python filename.py 不Leetcode 等级朗格公司再来1个简单的JavaScript 2个简单的JavaScript 3...

    competive_programing:精进の记录

    “competive_programing-master”作为压缩包子文件的名称,暗示这是一个Git仓库的主分支,通常包含项目的源代码、文档、测试用例等。用户可能可以从中找到关于如何使用Python解决各种算法问题的示例代码,也可能包含...

    The C Programing language

    根据提供的文件信息,实际内容与要求的C编程语言知识点不符,该文件内容为一份小品剧本,因此将基于剧本中的元素进行无关内容的剔除,接下来将围绕...掌握这些基础概念对于学习更高级的语言和技术也是非常有帮助的。

    Web-Programing:学习基本的网络编程

    在这个主题中,我们将深入探讨网络编程的基本概念,尤其是与HTML相关的知识,因为这是构建网页内容的关键技术。 网络编程的核心是HTTP(超文本传输协议),它是互联网上应用最广泛的数据通信协议。HTTP允许客户端...

Global site tag (gtag.js) - Google Analytics