第一部分:用户管理

创建用户:CREATE DATABASE XXX

查看用户:SHOW DATABASES;
关键查看用户:show databases like 'de.*'
 
讲解:创建一个用户就等于在物理目录下创建了一个文件,该文件是以.db结尾的,
          默认的路径是:/user/hive/warehouse/zqx.db
          创建用户时可以指定路径: create database XXX 
                                                     location '/my/preferred/directory'
讲解:为后期维护方便,可以创建用户时添加描述内容
           create database XXX 
           comment 'this is my first database';
           在使用describe XXX 时,就会看到用户描述信息
 
删除用户:drop database if exists XXX  --> IF EXISTS是可选的,加上可以避免数据库XXX不存在而报错
讲解:原则上hive是不允许删除一个含有表的database。
          1、用户要么先删除掉该用户下所有的表,再删除该用户
          2、要么在删除用户语句中加上关键字 CASCADE,它的意思是让hive自动的先删除掉用户下的所有表
               drop database if exists XXX cascade;
           如果某个用户被删除了,它所对应的物理路径和文件也同时被删除
 
第二部分:表的管理
 
创建表:
create table if not EXISTS employees(
  emp_id string comment 'id',
  name string comment 'name',
  phone_number string comment 'phone',
  depar_id string comment 'depart_ID'
comment 'employees_table'
location '/user/hive/warehouse/zqx.db/employees';
---IF NOT EXISTS 是可选的,如果表已经存在,HIVE就会忽略掉后面的执行语句,不会有任何提示。
---LOCATION是指定该表在HDFS中的URL路径。
 
查看某用户下的表: show tables in zqx;
查看表结构:desc employees;
查询某列:desc employees.phone_number;
修改表: alter table 
拷贝已存在数据表的表结构: create table if not exists zqx.copy_table like zqx.employees;
 
讲解:以上创建的employees在hive中被称为“内部表”,删除该表后,表中的数据也会同时被删除。
讲解:内部表不方便和其他领域进行共享数据,假设使用pig领域进行操作数据,会用到hive领域中的数据,
          可并没有给与pig使用权,我们就可以创建一个外部表指向这部分数据,就可以直接访问hive中的数据
 
外部表:
create external table if not exists departitions(
  depart_id string comment 'depart_id',
  depart_name string comment 'departition name'
)
comment 'departition name' 
row format delimited fields terminated by ','    
location '/user/hive/warehouse/zqx.db/departitions'
---关键字external表示该表是外部表
---外部表特点:hive认为该表并非拥有这部分数据,删除该表时,不会删除掉数据。
 
查询数据表是外部表还是内部表: describe extended departitions;
                                                     内部表: ... tableType:MANAGER TABLE
                                                     外部表: ... tableType:EXTERNAL TABLE
 
分区表:
create table departements(
  depart_id string comment 'depart id',
  depart_name string comment 'depart name' 
)
partitioned by (acct_month string)
row format delimited fields terminated by '|' 
stored as textfile;
---指定按照 acct_month 进行分区
 
查看是否分区表: show partitions departments;
查看指定分区:show partitions departments partition( acct_month = '201509' );
 
给表增加分区:alter table employees add partition( acct_month = '201509' );
 
表重命名: alter table employees rename to employees_new ;
 
对表分区的操作
    1、增加表分区: alter table employees add partition(acct_month = '201509') location = 'XXXX'
                                                                            partition(acct_month = '201510') location = 'XXXX'
                                                                                                            .... ;
          在同一个怎家语句中,可以添加多个分区。
    2、删除表分区: alter table employees drop partition(acct_month = '201509');
 
增加列: alter table employees add columns( alter_1 string comment 'alter one',
                                                                            alter_2 string comment 'alter two' );
 
讲解:字段添加中文注释报错问题:
           由于编码方式不一致导致的
           执行comment ''后,中文会保存到mysql中,当编码方式不一致时,保存进去的就会是乱码,所以报错。
 解决1:给字段添加注释时,需要转换编码方式,设置成UTF-8     

(1)修改表字段注解和表注解

alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;

alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

(2) 修改分区字段注解:

alter table PARTITION_PARAMS  modify column PARAM_VALUE varchar(4000) character set utf8 ;

                         alter table PARTITION_KEYS  modify column PKEY_COMMENT varchar(4000) character set utf8; 
  解决2:

            修改hive连接mysql的连接为utf-8
                 <property> 
                          <name></name> 

<value>jdbc:mysql://IP:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8</value> 
                          <description>JDBC connect string for a JDBC metastore</description> 
                  </property>

 
 
第三部分:数据装载
讲解:目前hive中不支持行级别的数据插入、更改和删除的操作,要想表中有数据,只能通过“大量”的数据      
          装载操作,通过文件给数据表加载数据。
 
装载数据: load data local inpath '文件放置的目录' -->如果该目录不存在的话,会首先创建该目录
                  overwrite into table employees
                  partition (acct_month = '201509');    ----> 如果employees不是分区表,则省略partition子句
 local关键字:如果使用了local关键字,那么“文件放置的目录”就为本地文件系统路径,数据被拷贝到目标
                       位置。
                       如果省略掉local关键字,那么路径应该是分布式文件系统中的路径,这种情况下,数据是从分        
                       布式文件系统路径转移到目标位置(而不是拷贝)
                       总结: load data local ... 拷贝本地数据到分布式文件系统上的目标位置
                                  load data ... 从HDFS系统中,将数据从一个集群HDFS中转移到另一个集群HDFS中
 
讲解:HIVE并不会验证用户装载的数据和表的模式是否匹配。HIVE会验证文件格式是否和表结构是否一致
                                                                            第三部分:数据导出
insert overwrite local directory 'XXXX' select * from XXX;
sqlldr userid=mid/mid679@jyfx1 control=tag_file.ctl
sqlldr userid=mid/mid679@jyfx1 control=sqlldr_ora.ctl direct=true parallel=true  
-- direct=true  不展示过程进度
-- parallel=true  并发
 
转换编码: iconv -f UTF-8 -t GB18030 t_m_make_tag_file.txt1 -o t_m_make_tag_file.txt
    
 
 
 
第四部分:数据的查询
LIMIT语句:限制查询记录的条数
CASE ... WHEN ... THEN语句:与ORACLE用法一致
 
讲解:什么情况下HIVE可以避免进行MapReduce
          查询原理:假设查询employees表,就是Hive访问employees表对应的存储路径下的文件。
          1、只是以分区字段做为查询条件的情况,不会触发MapReduce,这种情况叫:本地模式
               例如:select * from departments where acct_month = '201509'  --> acct_month是分区字段
          2、属性 hive.exec.mode.local.auto 的参数设置为true,Hive会一直默认使用本地模式执行其他操作
          除以上两种情况以外,Hive执行操作,都会触发MapReduce来执行所有查询。
 
讲解:Hive会对每一个JOIN连接对象启动一个MapReduce任务。
 
讲解:关于Hive的执行顺序,例如:
           select A.ymd,A.price_close,B.price_close,C.price_close
           from stocks A JOIN stocks B  ON A.ymd = B.ymd 
                                   JOIN stocks C  ON A.ymd = C.ymd
           where A.symbol = 'AAPL'
               and B.symbol = 'IBM'
               and C.symbol = 'GE';
           例子中,会首先启动一个MapReduce Job对表A和表B进行连接操作,
                         然后再启动一个MapReduce Job将第一个MapReduce Job的输出结果和表C进行连接操作
           Hive的执行顺序是按照从左往右执行的。
 
 
关于JOIN连接
    1、优化:在上面的SQL语句中,表A、B、C在做JOIN关联时,所使用的关联字段都是 ymd ,的这种情 
                   况。(即:所使用的关联字段是相同的字段)
         讲解:当3个或者更多个表进行JOIN关联时,如果每个ON自居都使用相同的关联字段的话,就只会产生           
                   一个MapReduce 。
 
    2、关联原理:Hive在执行SQL脚本时,会假定查询中最后一个表是数据量最大的,在对每一行记录进行关联操作时,Hive会将其他的表缓存起来,然后扫描最后那张表。所以要将数据量最大的表放在最后。
 
    3、Hive的标记机制:在编写SQL脚本时,并非总是要将最大的表放置在查询语句的最后,因为Hive提供了一个“标记”,用来指定哪个表的数据量是最大的,Hive就会首先扫描哪个表。
         例如:  select /*+STREAMTABLE(s)*/ s.ymd , s.symbol , d.price_close
                      from stocks s JOIN dividends d 
                      ON s.ymd = d.ymd;
                   
数据类型转换: double 类型 ---> string类型     cast(cast(user_id as bigint) as string)
 
数据类型:
数据类型 所占字节 开始支持版本
TINYINT 1byte,-128 ~ 127
 
SMALLINT 2byte,-32,768 ~ 32,767
 
INT 4byte,-2,147,483,648 ~ 2,147,483,647
 
BIGINT 8byte,-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
 
BOOLEAN
 
 
FLOAT 4byte单精度
 
DOUBLE 8byte双精度
 
STRING
 
 
BINARY
 
从Hive0.8.0开始支持
TIMESTAMP
 
从Hive0.8.0开始支持
DECIMAL
 
从Hive0.11.0开始支持
CHAR
 
从Hive0.13.0开始支持
VARCHAR
 
从Hive0.12.0开始支持
DATE
 
从Hive0.12.0开始支持
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

hive笔记(自学整理的)的更多相关文章

  1. 2. Hive常见操作命令整理

    该笔记主要整理了<Hive编程指南>中一些常见的操作命令,大致如下(持续补充中): 1. 查看/设置/修改变量2. 执行命令3. 搜索相关内容4. 查看库表信息5. 创建表6. 分区7. ...

  2. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  3. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  4. SQL 基础语法笔记教程整理

    最近从图书馆借了本介绍 SQL 的书,打算复习一下基本语法,记录一下笔记,整理一下思路,以备日后复习之用. PS:本文适用 SQL Server2008 语法. 首先,附一个发现的 MySQL 读书笔 ...

  5. java学习笔记系列整理说明

    java学习笔记系列整理说明 ​ 陆陆续续也巩固学习java基础也有一段时间了,这里整理了一些我认为比较的重要的知识点,供自己或者读者以后回顾和学习.这是一个学习笔记系列,有自己的整理重新撰写的部分, ...

  6. Learning The Bash Shell读书笔记(整理)

    最近搞了一本书 Learning Bash Shell,发现有人已经写了阅读笔记,我就在这边整理一下 来自blog:http://blog.sina.com.cn/n4mine Learning Th ...

  7. Hive笔记--sql语法详解及JavaAPI

    Hive SQL 语法详解:http://blog.csdn.net/hguisu/article/details/7256833Hive SQL 学习笔记(常用):http://blog.sina. ...

  8. 英语零散笔记Note整理

    无意之间整理电脑发现还存放着以前自己看视频做的一些笔记,关于新概念英语的笔记,觉得不错,放于博客,以供学习. English Note1 定语从句 将不重要的动作放在定语从句中,重要的放在主干中. 倒 ...

  9. Hive 笔记

    DESCRIBE EXTENDED mydb.employees  DESCRIBE EXTENDED mydb.employees DESCRIBE EXTENDED mydb.employees ...

随机推荐

  1. hdu 2047 阿牛的EOF牛肉串

    如果末尾加的是E或F,显然是2*a[i-1] 如果末尾加的是O,则末2位一定是EO或FO,则为2*a[i-2]. 然后两者相加 2*a[i-1]+2*a[i-2] = 2*(a[i-1]+a[i-2] ...

  2. 如何做一名好的web安全工程师?

    在网络安全行业里面,web安全方向的人相对来说算是占大头,因为web安全初学阶段不像系统底层安全那么枯燥,而且成功hack目标网站的成就感相对也是比较强的. web安全工程师这个职位在甲方和乙方公司都 ...

  3. Spark Graphx In Action

    两个重要的技术:Spark和graphs 本章节内容 为什么Spark是最先进的大数据处理系统 是什么让图可以以一种独特的方式来模拟关联数据 GraphX为什么会成规领先的图分析平台

  4. jQuery 事件用法详解

    jQuery 事件用法详解 目录 简介 实现原理 事件操作 绑定事件 解除事件 触发事件 事件委托 事件操作进阶 阻止默认事件 阻止事件传播 阻止事件向后执行 命名空间 自定义事件 事件队列 jque ...

  5. javascript工厂模式

    工厂模式 设计工厂模式的目的是为了创建对象.它通常在类或者类的静态方法实现,具有下列目标: 1.在创建相似对象是执行重复操作 2.在编译时不知道具体类型(类)的情况下,为工厂客户提供一种创建对象的接口 ...

  6. [Unity3D]关于Assets资源目录结构管理

    原地址:http://www.cnblogs.com/hisiqi/p/3203515.html 分享个我们项目常用的目录结构,微调过很多次,最终到了这个版本.个人认为这种管理资源方式是不错的.欢迎探 ...

  7. IOS model的getter和setter方法

    总结: 当使用 self.str1 = @"xxx";时, 系统自动调用 setter方法 param_str = self.str1; 自动调用getter方法注意: 只在对象点 ...

  8. c++ exports def文件

    https://msdn.microsoft.com/zh-cn/library/hyx1zcd3(v=vs.80).aspx EXPORTS 引入了一个由一个或多个 definitions(导出的函 ...

  9. php友好格式化时间

    php格式化时间显示 function toTime($time) {//$time必须为时间戳 $rtime = date("Y-m-d H:i",$time); $htime ...

  10. MySQL数据库备份和还原的常用命令

    其实很多情况下mysql备份就是采用了这些命令,例如: mysql导入和导出数据 linux自动定时备份web程序和mysql数据库 备份MySQL数据库的命令 mysqldump -hhostnam ...