HQL学习

 

1.hive的数据类型

2.hive_DDL

2.1创建、删除、修改、使用数据库

 
 

Default数据库,默认的,优先级相对于其他数据库是最高的
 

2.2重点:创建表_内部表_外部表

hive通过sql来分析hdfs上结构化的数据,将数据文件映射为表的结构
  1. – create table person(
  2. – id int,
  3. – name string,
  4. – age int,
  5. – likes array<string>,
  6. – address map<string,string>
  7. –)
  8. – row format delimited
  9. – FIELDS TERMINATED BY ','
  10. – COLLECTION ITEMS TERMINATED BY '-'
  11. – MAP KEYS TERMINATED BY ':'
  12. – lines terminated by '\n';
  13. –Select address[‘city’] from person where name=‘zs’
第一点注意:ROW FORMAT row_format

 

 
序列化和反序列化要对数据文件进行拆分映射到表里面,那么ROW FORMAT 加上 DELIMITED 就是指定序列化和反序列化的规则,通俗讲就是如何进行数据的拆分,重写的规则就是ROW FORMAT 加上 SERDE
 
比如:

 
FIELDS TERMINATED BY ','        指定一行数据的字段按照,分割
COLLECTION ITEMS TERMINATED BY '-'   如果是集合,按照-分割集合中的每个元素
MAP KEYS TERMINATED BY ':'  map类型的按照:分割
LINES TERMINATED BY '\N'   行之间按照换行符分割,这也是默认的
 
第二点注意:STORED AS file_format

 它指定文件在hdfs上以什么格式进行存储,默认是TEXTFILE
其他几种方式在存储时可以指定压缩,使用压缩(好处:减少磁盘占用空间,坏处:写的时候进行压缩,读的时候进行解压缩,都需要占用cpu资源,效率会打折扣)
 
第三点注意:定义字段时的特殊类型(array,map,struct)

 

 
第四点注意:想想插入测试数据(上面的那三条)会用insert语句么?
也可以,但是不会那样做,因为insert底层转化为MR
所以这里采用另一种方式:

LOCAL如果数据存在本地需要加LOCAL;如果存在hdfs上就不用了
                 如果是本地,那麽这种方式先上传到hdfs中一个临时文件,再将临时文件移动到hive中对应的数据存放目录下
                 如果是将hdfs中的数据加载进表,那么这种方式实际是讲hdfs中的数据文件移动到了hive的dir下(/user/hive/warehouse)
 
第五点注意:外部表
创建外部表时,需要指定数据存放的位置

创建外部表,会在hdfs中LOCATION指定的路径下创建和表名对应的目录
(而创建内部表,会在hive-site.xml中配置的dir下创建对应的目录)

 

 删除内部表和外部表的区别?

1.删除内部表,会元数据信息联同数据一块进行删除(内部表数据的维护交由hive本身进行管理
2.删除外部表,只会删除元数据信息,但是在hdfs上存储的数据还在(外部表则不是
 
truncate table 表名
 
第六点注意:将子查询的结果存储到新表中

第一步:创建了表;第二部:将查出的结果插入到表中(注意这种方式在创建表时不能指定列,否则就会报错)
 
6.1这种方式什么时候会用?
    创建中间表的时候,如果需要一些数据可以通过这种方式来做。
6.2这种方式和  create table psn4 like psn3 的区别?

 

3.hive_分区

1.分区表什么时候会用?

举例一:比如有一张人员表,分析一些日志数据,可以按照天进行分区,那么每一天的数据会存放在对应的分区中(会存储在每一天的目录下面)
举例二:有一个很大的表,里面存放了很多的日志,这时候可以采用分区,进行标识,分块管理
 
注意:分区的字段一定不能在表的列名里面
 

2.分区表的创建,添加数据,查看对应分区下的数据,修改分区、删除分区

创建带有分区的表psn5

 
创建了分区,进行插入数据,就需要指定分区字段,否则就会报错

 
查看表,发现有两个分区(boy, girl)

 
在hdfs中查看,发现目录下有两个目录对应两个分区

 
查看指定分区下的数据
select * from psn5 where sex = 'boy'
 
添加分区
ALTER TABLE psn5 ADD PARTITION (sex = 'weizhi')              //在一个表中添加一个分区
ALTER TABLE psn5 DROP PARTITION (sex = 'weizhi')            //同时删除对应分区中的数据
 
  1. ---分区_指定两个分区字段
  2. create table psn5(
  3. id int,
  4. name string,
  5. likes ARRAY <string>,
  6. address MAP <string, string>
  7. )
  8. PARTITIONED BY(sex string,age int)
  9. ROW FORMAT DELIMITED
  10. FIELDS TERMINATED BY ','
  11. COLLECTION ITEMS TERMINATED BY '-'
  12. MAP KEYS TERMINATED BY ':';
  13. ---创建分区后,再进行插入数据,就需要指定分区字段
  14. load data local inpath '/root/data' into table psn5 partition (sex='boy',age=1);
删除分区的时候,一定要注意(分区下可能还有分区)

 

4.hive_DML

重点掌握1:load data方式,2:from insert ...插入数据
1.创建psn7,将数据从psn1中查出来,插入到psn7中
  1. create table psn7 like psn1;
  2. from psn1
  3. insert into table psn7 select id, name, likes, address
思考一:hive其实就是写sql来分析hdfs上的数据,那么问题来了,以上这种方式做什么用?
    比如我们要分析一个WordCount,那么结果只是显示在控制台么,显然不是,我们要将hive sql运行的结果存储到另一张表中
思考二:为什么要将from放在上面呢?
    我们将对同一张表分析的多个指标写到结果表中,就不用写多个sql了,要不还需要join
 

附件列表

Hive HQL学习的更多相关文章

  1. Hive入门学习随笔(一)

    Hive入门学习随笔(一) ===什么是Hive? 它可以来保存我们的数据,Hive的数据仓库与传统意义上的数据仓库还有区别. Hive跟传统方式是不一样的,Hive是建立在Hadoop HDFS基础 ...

  2. hive的学习入门(飞进数据仓库的小蜜蜂)

    前言 hive是构建在Hadoop上的数据仓库平台,其设计目标是:使Hadoop上的数据操作与传统的SQL结合,让熟悉sql的开发人员能够轻松的像Hadoop平台迁移. Hive是Facebook的信 ...

  3. Hive入门学习

    Hive学习之路 (一)Hive初识 目录 Hive 简介 什么是Hive 为什么使用 Hive Hive 特点 Hive 和 RDBMS 的对比 Hive的架构 1.用户接口: shell/CLI, ...

  4. Hive深入学习--应用场景及架构原理

    Hive背景介绍 Hive最初是Facebook为了满足对海量社交网络数据的管理和机器学习的需求而产生和发展的.互联网现在进入了大数据时代,大数据是现在互联网的趋势,而hadoop就是大数据时代里的核 ...

  5. Hive 体系学习

    Hive简介 Hive是一个基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并使用HQL作为查询接口.HDFS作为存储底层.MapReduce作为执行层,将HQL语句转换成M ...

  6. 60分钟内从零起步驾驭Hive实战学习笔记

    本博文的主要内容是: 1. Hive本质解析 2. Hive安装实战 3. 使用Hive操作搜索引擎数据实战 SparkSQL前身是Shark,Shark强烈依赖于Hive.Spark原来没有做SQL ...

  7. Hive基础学习

    Hive 学习记录Hive介绍:Hive 是起源于Facebook,使得Hadoop进行SQL查询成为可能,进而使得非程序员也可以进进行对其使用:它是一种数据仓库工具,将结构化的数据文件 映射为一张数 ...

  8. Hive入门学习--HIve简介

    现在想要应聘大数据分析或者数据挖掘岗位,很多都需要会使用Hive,Mapreduce,Hadoop等这些大数据分析技术.为了充实自己就先从简单的Hive开始吧.接下来的几篇文章是记录我如何入门学习Hi ...

  9. hive入门学习线路指导

    hive被大多数企业使用,学习它,利于自己掌握企业所使用的技术,这里从安装使用到概念.原理及如何使用遇到的问题,来讲解hive,希望对大家有所帮助.此篇内容较多:看完之后需要达到的目标1.hive是什 ...

随机推荐

  1. 20行JS代码实现贪吃蛇

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Python安装和开发环境搭建

    1.官网:http://www.python.org/download/下载安装包,目前最新版本为3.6,安装包很多地方可以下,也可以在360软件管家上下载安装  特别要注意勾选:Add Python ...

  3. Error in .Call.graphics(C_palette2, .Call(C_palette2, NULL)) : invalid graphics state

    在调用ggplpt2包画图时,出现错误 Error in .Call.graphics(C_palette2, .Call(C_palette2, NULL)) : invalid graphics ...

  4. Ubuntu16.04 编译 OpenJDK7

    <深入理解Java虚拟机>第二版第一章实践 准备 Mercurial sudo apt-get install mercurial OpenJDK7 hg clone http://hg. ...

  5. Netty之心跳检测技术(四)

    Netty之心跳检测技术(四) 一.简介 "心跳"听起来感觉很牛X的样子,其实只是一种检测端到端连接状态的技术.举个简单的"栗子",现有A.B两端已经互相连接, ...

  6. Python中的单例模式的几种实现方式的优缺点及优化

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  7. 让git不再跟踪配置文件的变化

    我们经常会在配置文件里留下一些敏感信息 比如数据库链接字符串的用户名和密码 如果不提交配置文件到github或者其他源码管理网站 那么你的粉丝很可能就无法正确运行你的项目,就达不到开源的目的了 那么, ...

  8. Tsung:开源多协议分布式负载&压力测试工具

    Main features High Performance: the load can be distributed on a cluster of client machines Multi-pr ...

  9. ThreadPool.QueueUserWorkItem引发的血案,线程池异步非正确姿势导致程序闪退的问题

    ThreadPool是.net System.Threading命名空间下的线程池对象.使用QueueUserWorkItem实现对异步委托的先进先出有序的回调.如果在回调的方法里面发生异常则应用程序 ...

  10. go语言 前言

    1什么是Go? Go是一门开源.并发支持.具有垃圾回收机制.编译性系统编程语言.在静态编译语言的高性能和动态语言的高效开发之间拥有良好平衡点.被称为21世纪的C语言.Go语言已经成为云计算.云存储时代 ...