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. mybatis源码分析(一)

    mybatis源码分析(sqlSessionFactory生成过程) 1. mybatis框架在现在各个IT公司的使用不用多说,这几天看了mybatis的一些源码,赶紧做个笔记. 2. 看源码从一个d ...

  2. npm lodash

    在数据操作时,Lodash 就是我的弹药库,不管遇到多复杂的数据结构都能用一些函数轻松拆解. ES6 中也新增了诸多新的对象函数,一些简单的项目中 ES6 就足够使用了,但还是会有例外的情况引用了少数 ...

  3. input选择框样式修改与自定义

    html自带的选择框样式不好看,并且在ios设备上丑的罚款.所以一般都是自定义样式: 原理:将原来默认的input选择框隐藏,然后控制label的:before与:after,配合矢量图标或者图片来实 ...

  4. dJango前言之 socketserver源码

    socketserver源码分析: ftpserver=socketserver.ThreadingTCPServer(('127.0.0.1',8080),FtpServer) ftpserver. ...

  5. 【精选】Nginx模块Lua-Nginx-Module学习笔记(二)Lua指令详解(Directives)

    源码地址:https://github.com/Tinywan/Lua-Nginx-Redis Nginx与Lua编写脚本的基本构建块是指令. 指令用于指定何时运行用户Lua代码以及如何使用结果. 下 ...

  6. iOS微信运动 刷分

    修改 iOS微信运动的数据  很简单,这里记录下实现步骤. 首先要安装Theos,具体安装步骤就不说了.网上很多. 大体安装步骤: sudo brew install dpkg sudo brew i ...

  7. 初读"Thinking in Java"读书笔记之第二章 --- 一切都是对象

    用引用操纵对象 Java里一切都被视为对象,通过操纵对象的一个"引用"来操纵对象. 例如, 可以将遥控器视为引用,电视机视为对象. 创建一个引用,不一定需要有一个对象与之关联,但此 ...

  8. linux下centos6.8相关配置,以及音频相关配置

    一:安装上传下载命令 1:cd /tmp 2:wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz 3:tar zxvf lrzsz-0. ...

  9. 解决CentOS7安装Tomcat不能被外部访问的问题

    在CentOS7安装了Tomcat,在服务器内部使用火狐浏览器通过localhost:8080是可以访问的,但是不能被外部访问,主要原因是因为防火墙的存在,导致端口不能被访问.CentOS是使用fir ...

  10. eslint 的基本配置介绍

    eslint 这个代码规则,是在用webpack +vue-cli这个脚手架时候接触的,默认的规则可能不太习惯我们日常平时的代码开发,需要对这个规则稍加改造. 下面的是 eslintrc.js的基本规 ...