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. java递归实现文件夹文件的遍历输出

    学习java后对一个面试小题(今年年初在团结湖面试的一个题目) 的习题的编写. ''给你一个文件,判断这个文件是否是目录,是目录则输入当前目录文件的个数和路径,''' /** * @author li ...

  2. vue2.0的瀑布流组件-使用说明

    做一个小项目,需要瀑布流,就选他了,先看看效果 使用瀑布流布局组件:vue-waterfall-easy 下载引入: 方式一:直接从git上复制组件的完整代码,引入vue组件文件即可 import v ...

  3. 【ASP.NET Core】运行原理(4):授权

    本系列将分析ASP.NET Core运行原理 [ASP.NET Core]运行原理(1):创建WebHost [ASP.NET Core]运行原理(2):启动WebHost [ASP.NET Core ...

  4. 【转】搭建spark环境 单机版

    本文将介绍Apache Spark 1.6.0在单机的部署,与在集群中部署的步骤基本一致,只是少了一些master和slave文件的配置.直接安装scala与Spark就可以在单机使用,但如果用到hd ...

  5. MySQL查询相关(初级)(全文重点)

    where 是约束条件 先找到表 from t1 where 条件 : 指的是把表里的数据,一条一条的记录取出来 然后 group by 分组, having 是过滤条件 指记录已经出来 聚合 cou ...

  6. Ruby学习之代码块

    代码块在其他的语言中都或多或少接触过一些,如perl中sort{$a<=>$b}keys,传入代码块实现按数值排序,在swift中用到闭包,更加深入学习到training closure. ...

  7. vue的挖坑和爬坑之css背景图样式终极解决方法

    原问题 #wrapper{ width:100%; height:100%; position:fixed; background-image:url(./img/open_bg.jpg) } 在.v ...

  8. python模块:shelve

    shelve 1)模块功能:以 key - value 的方式存储数据. 2)写数据 >>> import shelve >>> db = shelve.open( ...

  9. 阻止form空表单提交----JavaScript

    网上看到很不错的阻止form空表单提交 第一种方法 <div class="warp"> <h2>登录到pfan空间</h2> <p> ...

  10. Sequelize 基本操作

    Sequelize 是 Node 的一个 ORM(Object-Relational Mapping) 框架,用来方便数据库操作. 配置 sequelize 以 mysql 为例 首先我们要引入npm ...