hive知识点总结

1.什么是HIVE?

  1.hive是hadoop生态圈的一个工具,提供一种结构化查询语言,可以查询HDFS或者其他文件系统上的文件。

2.hive操作:

  1.hive一次使用命令:hive -S -e "select * from mytable limit 3"; //临时应急使用,-S开启静默模式,去掉结果的OK 和timeTaken。

  2.从文件中执行hive查询:hive -f /path/to/file/file.sql

  3.用正则表达式筛选数据库: show databases like 'h.*';

  4.删除库:drop database if exists user; #默认hive 不允许删除表的库。要么先删除库中的表,要么在删除语句后面加上cascade

  5.拷贝表:create table if not exists mydb.table like mydb.table2;

  6.向表中装载数据:load data inpath '${env:HOME}'/california-employees'

           overwrite into table employees  #overwrite:如果分区目录不存在则创建

           partition (country = 'us',state ='ca'); #如果使用local关键字,表明从本地copy到目标路径,如果没有使用则是在分布式文件系统中进行转移。

3.hive中的特殊数据类型:map ,array,struct

  1.建表实例:create table emploees{

          name string,

          salary float,

          subordinates array<string>,

          deductions map<string,float>,

          address struct<street:string,city:string,state:string,zip:int>

        } row format delimited

         filelds terminated by '\001'   #\001 是^A的八进制数

         collection item terminated by '\002'  #\002 是^B的八进制数

         map keys terminated by '\003'    #\003 是^C的八进制数

         line terminated by '\n'

         stored as textfile;

4.hive的读时模式:

  1.读时模式:对于hive 要查询的数据,有很多种方法创建,修改,甚至损坏,因此hive 不会再数据加载时进行验证而是在数据查询时验证,即读时模式。

  2.如果模式和文件内容不匹配,那么用户将会看到很多null。

5.HQL数据定义:

  1.hive特点:不支持行级插入,更新和删除操作。不支持事务。

7.表的分类:

  1.管理表

    1.hive或多或少管理表周期

    2.删除管理表时,hive也会删除这个表的数据

  2.外部表:

    1.数据源来自于三方,比如hdfs

    2.删除表只会删除元数据,而不会删除数据

    3.建表实例:create external table if not exists stocks(  # external 表示为外部表

            exchange string,

            symbol string,

            price_open string)

            row format delimited fields terminated by ","

            location '/data/stocks';   #location表示数据路径

  3.分区表:

    1.将数据以一种符合逻辑的方式进行组织,比如分层存储。

    2.建表实例:create table exployees(

            name string,

            salary float)

            parttioned by (country string, state string);

  4.外部分区表:

    1.管理大量生产数据最为常见,比如日志文件分析。

    2.建表实例: create external table if not exists log_messages(

            hms int,

            sevverity string,

            server string,

            process_id int,

            message string)

            partitioned by (year int,month int,day int)

            row format delimited fields terminated by '\t';

8.聚合函数:(部分)

  1.count(*):计算总行数,包括null行

  2.count(expr):计算提供expr表达式非null的行数

  3.sum(distinct col):计算排重后的和

  4.set hive.map.aggr=true:提高聚合性能,需要更多的内存

9.表生成函数:

  1.explode(Array array) :返回0到多行结果,每一行对应array数组的每一个元素

  2.explode(Map map):同理,每行对应每个map键值对

  3.inline(ARRAY<STRUCT[,STRUCT]>):将结构体数组提取出来并插入表中。
  4.json_tuple(string json_Str, p1,p2 ,..,pn):本函数可以接受多个标签,对json字符串进行处理。

10.case when then:

  1.用于单列查询结果:select name,salary,

              case

                when salary <50000.0 then "low"

                when salary >=50000.0 and salary <70000.0 then "middle"

                when salary >=70000.0 and salary <1000000.0 then "high"

                else "very high"

              end as bracket from employees;

11.like & rlike:

  1.like:通过字符串开头或结尾,以及特定的字符串进行匹配。

  2.rlike:可以通过java正则来匹配条件。

12.join语句:

  1.inner join:只有两个链接的表都存在与连接匹配的数据才会被保留下来

  2.join优化:当对三个或更多表join时,如果连接关键词相同的话,哪么只会产生一个MR job。

        hive同时假定查询最后一张表是最大表,再对每行记录进行连接时,会试图将其他表缓存下来,然后扫描最后那张表进行计算,因此需要保证查询的表大小从左到右是依次增加的。

  3.left outer join:将左表符合where子句的所有记录返回,右表没有符合的列的值为null。

  4.outer join:外链接会忽略掉分区过滤条件

  5.right outer join :会返回右表符合where语句的记录,左表匹配不上的用null。

  6.full outer join :完全外链接,返回所有符合where条件的记录,任何不满足用null。

  7.left semi-join:左半开连接,返回左表记录,前提是其记录对于右边满足on的判定

    semi-join 通常比inner join效率高,因为对于左表的一条指定的记录,右表一旦找到对应的

    就会停止扫描。

  8.笛卡尔积join:表示左表行数乘以右表行数产生的数据。

  9.map-side join:如果所有表中只有一张小表,那么在最大的表通过map时将小表完全

    放到内存中,可以在map端执行连接。提升hive性能。

    在hive 0.7以后需要设置:set hive。auto。convert。join =true

13.order by & sort by

  1.order by :全局排序,所有数据通过一个reducer处理,耗时长。

  2.sort by :局部排序,对每个reduce的数据进行排序,方便后面的全局排序。

14.union all

  1.可以将两个表或者多个表进行合并。每个union子查询必须拥有相同列。

  2.union也可以用于同一个原表数合并。

15.使用视图来降低复杂查询:

  1.create view shorter_join as select * from people join cart on (cart.people_id =people.id) where firstname ="join";

    select lastname from short_join where id =3;

16.索引:

  1.建立索引:crate index employees_index

        on table employees (country)

        as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' # as 指定; 索引处理器

        with deferred rebuild

        idxproperties ('creartor' = 'me' ,'created_at' = 'some_time')

        in table employees_index_table

        partitioned by (country, name);

  2.Bitmap索引:create index employees_index

          on table employees(country)

          as 'bitmap'

          with deferred rebuild

          idxproperties ('creator' = 'me' , 'created_at' = 'some_time')

          in table employess_index_table

          partitioned by (country,name);

  3.重建索引:如果指定了deferred rebuild ,那么新索引将呈现空白状态,任何时候都可以进行索引创建或者

      使用alter index重建。

    alter index employees_index

     on table employees

      partioned by(country ='us') rebuild;

  4.显示索引:show formated index on employees;

  5.删除索引:drop if exists employees_index on table empolyees;

17.hive优化:

  1.explain:帮助我们学习hive是如何将hql转化为MapReduce任务的。

  2、explain extended:可以产生更多的输出信息。

  3.并行执行:hive会将一个任务切分为多个阶段,可以是MapReduce阶段,抽样阶段,合并阶段,limit阶段等,默认hive一次只会执行一个阶段,而特定的job可能包含众多阶段,这些阶段可能并非相互依赖,也就是说有些阶段是可以并行执行的,这样可以使整个执行时间变短。通过设置参数hive.exec.parallel值为true来设定。如果并行度增加,那么集群资源的利用率就会上升。

  4.严格模式:hive.mapred.mode 的值为true,禁止三类查询

    1.对于分区表,除非where语句中包含分区字段过滤条件来限制数据范围,否则不允许执行。即不允许用户扫描所有分区表,原因是耗费巨大资源。

    2.对于order by语句的查询,必须要求使用limit语句。因为order by 为了执行排序过程会将所有的数据放到一个reducer去处理,强制增加limit会防止reducer额外执行更长时间。

    3.限制笛卡尔积的查询。

  5.调节mapper和reducer的数量:mapper和reducer太多,造成不必要的开销,太少则没有充分利用集群的并行度。

    1.利用dfs -count命令来显示计算数据量大小,属性hive.exec.reducer.bytes.per.reducer默认为1GB。通过调整为750MB,hive就会使用4个reducer。

    2.hive的默认reducer为3,可以设置mapred.reduce.tasks 的值。

    3.当集群处理大任务时,为了控制资源利用情况,需要控制hive.exec.reducers.max。一个hadoop集群的map和reduce槽数是有限的,某个大的job会消耗所有的槽会导致其他job无法执行,

    通过设置hive.exec.reducers.max,阻止某个job消耗过多资源,对于这个属性值有个经验公式:(集群总reduce槽数*1.5)/执行中查询的平均个数。

  6.jvm重用:hadoop默认使用派生的JVM来执行map和reduce任务。JVM的启动会造成很大开销,尤其是job中会包含数百上千的task时,JVM重用会让JVM实例在一个job内重用n次,n的值可以在

      mapred.site.xml中配置:<name>mapred.job.reuse.jvm.num.tasks</name>

                 <value>10</value>

      缺点:开启JVM重用会一直占用使用的task槽数,以便进行重用,直到任务完成后释放。

18.hive函数

  1.hive自带UDF:

    1.show functions:abs ,acos,and,array,...

  2.UDF:用户自定义标准函数:输入一行的一到多列数据,输出一个值。

  3.UDAF:用户自定义聚合函数:接受一行到多行的零到多个列,输出一个值。

  4.UDTF:表生成函数:接受多行多列,输出多行多列。

hive知识点总结的更多相关文章

  1. 大白话详解大数据hive知识点,老刘真的很用心(1)

    前言:老刘不敢说写的有多好,但敢保证尽量用大白话把自己复习的知识点详细解释出来,拒绝资料上的生搬硬套,做到有自己的了解! 01 hive知识点(1) 第1点:数据仓库的概念 由于hive它是基于had ...

  2. 大白话详解大数据hive知识点,老刘真的很用心(2)

    前言:老刘不敢说写的有多好,但敢保证尽量用大白话把自己复习的内容详细解释出来,拒绝资料上的生搬硬套,做到有自己的了解! 1. hive知识点(2) 第12点:hive分桶表 hive知识点主要偏实践, ...

  3. 大白话详解大数据hive知识点,老刘真的很用心(3)

    前言:老刘不敢说写的有多好,但敢保证尽量用大白话把自己复习的内容详细解释出来,拒绝资料上的生搬硬套,做到有自己的了解! 1. hive知识点(3) 从这篇文章开始决定进行一些改变,老刘在博客上主要分享 ...

  4. Hive知识点

    1.Hive是一种建立在Hadoop文件系统上的数据仓库架构,并对存储在HDFS中的数据进行分析和管理:(也就是说对存储在HDFS中的数据进行分析和管理,我们不想使用手工,我们建立一个工具把,那么这个 ...

  5. Spark访问与HBase关联的Hive表

    知识点1:创建关联Hbase的Hive表 知识点2:Spark访问Hive 知识点3:Spark访问与Hbase关联的Hive表 知识点1:创建关联Hbase的Hive表 两种方式创建,内部表和外部表 ...

  6. IDEA SSM后端框架入门

    SSM框架 如果对SSM一无所知,推荐先去看这本书,可以在微信读书上看. 知识点 控制器返回对象时,对象需要有getter,setter方法,才能自动转化为json数据类型. 一个服务管理者对应多个业 ...

  7. 大数据核心知识点:Hbase、Spark、Hive、MapReduce概念理解,特点及机制

    今天,上海尚学堂大数据培训班毕业的一位学生去参加易普软件公司面试,应聘的职位是大数据开发.面试官问了他10个问题,主要集中在Hbase.Spark.Hive和MapReduce上,基础概念.特点.应用 ...

  8. 3. Hive相关知识点

    以下是阅读<Hive编程指南>后整理的一些零散知识点: 1. 有时候用户需要频繁执行一些命令,例如设置系统属性,或增加对于Hadoop的分布式内存,加入自定的Hive扩展的Jave包(JA ...

  9. Hive中知识点

    hive的最新学习资料:http://www.cnblogs.com/qingyunzong/p/8707885.html hive的参数设置大全:https://cwiki.apache.org/c ...

  10. hive 安装、知识点

    hive 查询语句: 语句 含义 show database; 或 show schemas; 查看数据库 show tables; hive显示所有表 set; 查看hive配置信息 问题:load ...

随机推荐

  1. oracle创建全文索引(oracle text)

    drop table test.QQ_MsgRecord; CREATE TABLE test.QQ_MsgRecord ( msg_group VARCHAR2(200), msg_object V ...

  2. C#/VB.NET 在Excel中添加水印

    在工作中,为了防止文件被随意复制和传播,通常我们会选择在文档中添加水印来对文件进行有效保护.文字水印是比较常见的一种保护手段,它可以有效防止文件被任意复制和随意打印传播.不过,Excel默认并没有水印 ...

  3. 认知篇:CQRS架构模式的本质

    作者:京东科技 倪新明 CQRS只是一种非常简单的模式(pattern),CQRS本身并不是一种架构风格,和最终一致性/消息/读写分离/事件溯源/DDD等没有必然的联系,它最大优势是给我们带来更多的架 ...

  4. 如何将WebAssembly优化到2MB?

    Blazor WebAssembly加载优化方案 对于Blazor WebAssembly加载方案的优化是针对于WebAssembly首次加载,由于BlazorWebAssembly是在首次加载的时候 ...

  5. 穿透的switch语句-循环概述与基本组成部分

    穿透的switch语句 在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运 行,直到遇到break,或者整体switch结束. pu ...

  6. 【分析笔记】DW7888 马达驱动芯片待机模式漏电流过高的问题

    发现问题 客户反馈说我们的硬件关机漏电流很大,但是拔掉电池之后再上电(仍处于关机状态)就会恢复为 16~20uA 左右.这让我也讶异,因为亲自测试过,漏电流只有 MCU 的休眠电流 16~20uA 左 ...

  7. Casbin: 连续3年参加Google Summer of Code的开源授权技术领导者

    Casbin是一个开源的授权解决方案,很自豪的宣布它已经连续三年参加Google Summer of Code(GSoC)项目.Casbin是实现访问控制和授权管理的最受欢迎的开源项目之一.该项目广泛 ...

  8. 使用 flexible.js + rem 制作苏宁移动端首页

    一.技术选型 二.搭建相关文件夹 三.设置视口标签以及引入初始化样式文件和js文件 四.body 样式 五.rem 适配方案二 body样式修改 index.css body { min-width: ...

  9. 1月3日内容总结——bbs项目登陆页面和主页、个人站点页的搭建

    目录 一.登陆功能完善 验证码功能实现 单机验证码实现验证码刷新(局部刷新) 点击登陆提交数据进行校验 二.主页搭建 html代码 views.py代码 主页内容部分 后台添加数据 分页器 前端获取头 ...

  10. 【Oculus Interaction SDK】(六)实体按钮 && 按压交互

    前言 这篇文章是[Oculus Interaction SDK]系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言.如果文章的内容已经不适用于新版本了,也可以直接联系我 ...