#创建表人信息表  person(String name,int age)
 hive>
create table person(name STRING,age INT)ROW FORMAT DELIMITED FIELDS
TERMINATED BY '\t' ESCAPED BY '\\' STORED AS TEXTFILE;
 OK
 Time taken: 0.541 seconds
#创建表票价信息表 ticket(int age,float price)
 hive>
create table ticket(age INT,price FLOAT)ROW FORMAT DELIMITED FIELDS
TERMINATED BY '\t' ESCAPED BY '\\' STORED AS TEXTFILE;
 OK
 Time taken: 0.154 seconds
#创建本地数据文件
 -rw-rw-r-- 1 hadoop hadoop  40 Feb  6 13:28 person.txt
 -rw-rw-r-- 1 hadoop hadoop  45 Feb  6 13:28 ticket.txt
#将本地的数据文件load到hive数据仓库中
 hive> LOAD DATA LOCAL INPATH '/home/hadoop/hfxdoc/person.txt' OVERWRITE INTO TABLE person;
 Copying data from file:/home/hadoop/hfxdoc/person.txt
 Copying file: file:/home/hadoop/hfxdoc/person.txt
 Loading data to table default.person
 Deleted hdfs://10.15.107.155:8000/user/hive/warehouse/person
 OK
 Time taken: 0.419 seconds
 hive> LOAD DATA LOCAL INPATH '/home/hadoop/hfxdoc/ticket.txt' OVERWRITE INTO TABLE ticket;
 Copying data from file:/home/hadoop/hfxdoc/ticket.txt
 Copying file: file:/home/hadoop/hfxdoc/ticket.txt
 Loading data to table default.ticket
 Deleted hdfs://10.15.107.155:8000/user/hive/warehouse/ticket
 OK
 Time taken: 0.25 seconds
#load命令会将数据文件移动到配置好的数据路径下:/user/hive/warehouse
 hive> show tables;
 hive> describe person
 hive> select * from person;
 OK
 huang   26
 lili    25
 dongdong        13
 wangxiao        5
 Time taken: 0.092 seconds
 hive>
 #注意select *语句是不会编译成MapReduce程序的,所以很快。
#稍作复杂点的join查询
 hive> select * from person join ticket on person.age = ticket.age;
 MapReduce Total cumulative CPU time: 5 seconds 510 msec
 Ended Job = job_201301211420_0011
 MapReduce Jobs Launched:
 Job 0: Map: 2  Reduce: 1   Cumulative CPU: 5.51 sec   HDFS Read: 519 HDFS Write: 71 SUCCESS
 Total MapReduce CPU Time Spent: 5 seconds 510 msec
 OK
 wangxiao        5       5       10.0
 dongdong        13      13      20.0
 lili    25      25      30.0
 huang   26      26      30.0
 Time taken: 32.465 seconds
 #这里查询语句被编译成MapReduce程序,在hadoop上执行
#采用外部表
#首先将本地文件put到hdfs文件路径下
 [hadoop@localhost hfxdoc]$ hadoop fs -mkdir /tmp/ticket
 [hadoop@localhost hfxdoc]$ hadoop fs -put person.txt /tmp/ticket
 [hadoop@localhost hfxdoc]$ hadoop fs -put ticket.txt /tmp/ticket         
 [hadoop@localhost hfxdoc]$ hadoop fs -ls /tmp/ticket
 Found 2 items
 -rw-r--r--   1 hadoop supergroup         40 2013-02-06 13:45 /tmp/ticket/person.txt
 -rw-r--r--   1 hadoop supergroup         45 2013-02-06 13:45 /tmp/ticket/ticket.txt
create
external table person_ext(name STRING,age INT)ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t' ESCAPED BY '\\' STORED AS TEXTFILE LOCATION
'/tmp/ticket'
#LOCATION只能配置数据路径,而刚刚我们的路径下有两个表的文件?这样创建的其中一个表可以吗?
#不可以!所以,一个文件路径下面的所有文件都应该是关联这个数据表的数据文件。
#如果有其他表的文件,这个创建过程不会报错,因为,hive默认文本里的字符串类型都可以隐式转换成任何其他数据类型。比如你还有一个文件是一行三列的,那么第三列
#在person表中是解析不到的,如果每行只有一列,那么第二列将会用NULL来补齐。所以我们调整下hdfs文件路径。
 hive> select * from person_ext;
 OK
 huang   26
 lili    25
 dongdong        13
 wangxiao        5
 1       10
 2       10
 5       10
 13      20
 14      20
 25      30
 26      30
 31      40
 Time taken: 0.088 seconds
 hive> drop table person_ext;
#Drop外表的操作不会删除元信息以为的数据,所以hdfs上还是存在数据文件

#复杂类型的数据表,这里列之间以'\t'分割,数组元素之间以','分割
 #数据文件内容如下
 1 huangfengxiao   beijing,shanghai,tianjin,hangzhou
 2 linan   changchu,chengdu,wuhan
 
 hive> create table complex(name string,work_locations array<string>)
     > ROW FORMAT DELIMITED
     > FIELDS TERMINATED BY '\t'
     > COLLECTION ITEMS TERMINATED BY ',';

hive> describe complex;
 OK
 name    string
 work_locations  array<string>

hive> LOAD DATA LOCAL INPATH '/home/hadoop/hfxdoc/complex.txt' OVERWRITE INTO TABLE complex
 hive> select * from complex;                                                               
 OK
 huangfengxiao   ["beijing","shanghai","tianjin","hangzhou"]
 linan   ["changchu","chengdu","wuhan"]
 Time taken: 0.125 seconds

hive> select name, work_locations[0] from complex;
 MapReduce Total cumulative CPU time: 790 msec
 Ended Job = job_201301211420_0012
 MapReduce Jobs Launched:
 Job 0: Map: 1   Cumulative CPU: 0.79 sec   HDFS Read: 296 HDFS Write: 37 SUCCESS
 Total MapReduce CPU Time Spent: 790 msec
 OK
 huangfengxiao   beijing
 linan   changchu
 Time taken: 20.703 seconds
#如何分区?
 表class(teacher sting,student string,age int)
 Mis li huangfengxiao 20
 Mis li lijie 21
 Mis li dongdong 21
 Mis li liqiang 21
 Mis li hemeng 21
 Mr xu dingding 19
 Mr xu wangqiang 19
 Mr xu lidong 19
 Mr xu hexing 19
 如果我们将这个班级成员的数据按teacher来分区
 create table classmem(student string,age int) partitioned by(teacher string)
 分区文件
 classmem_Misli.txt
  huangfengxiao 20 
  lijie 21         
  dongdong 21 
  liqiang 21         
  hemeng 21
 classmem_MrXu.txt
  dingding 19
  wangqiang 19
  lidong 19        
  hexing 19  
 LOAD DATA LOCAL INPATH '/home/hadoop/hfxdoc/classmem_Misli.txt' INTO TABLE classmem partition (teacher = 'Mis.li')
 LOAD DATA LOCAL INPATH '/home/hadoop/hfxdoc/classmem_MrXu.txt' INTO TABLE classmem partition (teacher = 'Mis.Xu')
 
 #分区列被默认到最后一列
 hive> select * from classmem where teacher = 'Mr.Xu';
 OK
 dingding        19      NULL    Mr.Xu
 wangqiang       19      NULL    Mr.Xu
 lidong  19              NULL    Mr.Xu
 hexing  19      NULL    Mr.Xu
 Time taken: 0.196 seconds
 #直接从分区检索,加速;如果where子句的条件不是分区列,那么,这个sql将被编译成mapreduce程序,延时很大。
 #所以,我们建立分区,是为了一些常用的筛选查询字段而用的。

#桶的使用?更高效!可取样!主要用于大数据集的取样
 桶的原理是对一个表(或者分区)进行切片,选择被切片的字段,设定桶的个数,用字段与个数的hash值进行入桶。
 比如bucket.txt数据文件内容如下:
 id name age
 1 huang 11
 2 li 11
 3 xu 12
 4 zhong 14
 5 hu 15
 6 liqiang 17
 7 zhonghua 19
 如果我们想将这个数据表切成3个桶,切片字段为id
 那么用id字段hash后,3个桶的内容如下:
 桶id hash 3 =0
 3 xu 12
 6 liqiang 17
 桶id hash 3 =1
 1 huang 11
 4 zhong 14
 7 zhonghua 19
 桶id hash 3 =2
 2 li 11
 5 hu 15
 这个过程的创建表语句如下:
 create table bucketmem (id int,name string,age int) CLUSTERED BY (id) sorted by (id asc) into 3 buckets
 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

LOAD DATA LOCAL INPATH '/home/hadoop/hfxdoc/bucketmem.txt' INTO TABLE bucketmem;
 select * from bucketmem tablesample(bucket 1 out of 4)

#其他操作参考,更完整的请参考官网: https://cwiki.apache.org/confluence/display/Hive/Home
 1) 创建与已知表相同结构的表Like:
 只复制表的结构,而不复制表的内容。
 create table test_like_table like test_bucket;

2) 对表进行重命名 rename to:
 ALTER TABLE table_name RENAME TO new_table_name

3) 增加分区 Add Partitions:
 ALTER TABLE table_name ADD partition_spec [ LOCATION 'location1' ]partition_spec [ LOCATION 'location2' ]

4) 对表中的某一列进行修改,包括列的名称/列的数据类型/列的位置/列的注释
 ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type[COMMENT col_comment] [FIRST|AFTER column_name]

5) 添加/替换列Add/ReplaceColumns
 ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENTcol_comment], ...)
 ADD COLUMNS 允许用户在当前列的末尾增加新的列,但是在分区列之前。

6) 创建表的完整语句:
 Create [EXTERNAL] TABLE [IF NOT EXISTS] table_name
 [(col_name data_type [COMMENT col_comment], ...)]
 [COMMENT table_comment]
 [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
 [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)]INTO num_buckets BUCKETS]
 [ROW FORMAT row_format]
 [STORED AS file_format]
 [LOCATION hdfs_path]
 
 7) 在hive中查看hdfs文件
 >dfs -ls /user;

Hive 入门(转)的更多相关文章

  1. 4 weekend110的hive入门

    查看企业公认的最新稳定版本:       https://archive.apache.org/dist/  Hive和HBase都很重要,当然啦,各自也有自己的替代品. 在公司里,SQL有局限,大部 ...

  2. hadoop笔记之Hive入门(Hive的体系结构)

    Hive入门(二) Hive入门(二) Hive的体系结构 ○ Hive的元数据 Hive将元数据存储在数据库中(metastore),支持mysql.derby.oracle等数据库,Hive默认是 ...

  3. hadoop笔记之Hive入门(什么是Hive)

    Hive入门(一) Hive入门(一) 什么是Hive? Hive是个数据仓库,数据仓库就是数据库,但又与一般意义上的数据库有点区别 实际上,Hive是构建在hadoop HDFS上的一个数据仓库. ...

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

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

  5. 第1章 Hive入门

    第1章 Hive入门 1.1 什么是Hive Hive:由Facebook开源用于解决海量结构化日志的数据统计. Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提 ...

  6. hive入门(一)、什么是hive

    1.Hive 基本概念 Hive是基于Hadoop的一个 数据仓库工具,可以将结构化的数据文件映射成一张表,并提供类SQL查询功能: Hive是构建在Hadoop 之上的数据仓库: 使用HQL作为查询 ...

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

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

  8. Hive Tutorial(上)(Hive 入门指导)

    用户指导 Hive 指导 Hive指导 概念 Hive是什么 Hive不是什么 获得和开始 数据单元 类型系统 内置操作符和方法 语言性能 用法和例子(在<下>里面) 概念 Hive是什么 ...

  9. 《OD大数据实战》Hive入门实例

    官方参考文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual 一.命令行和客户端 1. 命令窗口 1)进入命令窗口 hi ...

  10. Hive入门之UDFS函数

    一.UDFS函数介绍 1. 基本UDF (1)SHOWFUNCTIONS:这个用来熟悉未知函数. DESCRIBE FUNCTION<function_name>; (2)A IS NUL ...

随机推荐

  1. [置顶] java 通过classloader加载类再通过classforname实例化

    自己写一个web服务器,发现class.forName用不了,找不到类,原因是找不到类路径, 可以过加载需要的类的文件路径,然后再通过ClassLoader来加载所需要的类.其中的原 理就不多说了,下 ...

  2. SQL事务与并发

    1.Transaction(事务)是什么: 事务是作为单一工作单元而执行的一系列操作.包括增删查改. 2.事务的种类: 事务分为显示事务和隐式事务: 隐式事务:就是平常我们使用每一条sql 语句就是一 ...

  3. C#中关于DBNULL的处理方法

    从数据库中获取数据有些会是空值的,这时一不注意就会被坑了…… String.Concat(db.可能为DBNULL的值) 在这种情况下,如果是DBNULL,得到的会是""

  4. spring加载jar包中多个配置文件

    转自:http://www.cnblogs.com/GarfieldTom/p/3723915.html <import resource="classpath*:applicatio ...

  5. C++学习笔录2

    1.如果一个类要成为基类,那么它的成员变量声明成受保护的变量,既用关键字protected修饰. 2.处理共同继承产生的二义性:采用虚继承方式,当出现两个相同的成员时,编译器会自动删除其中一个.其方法 ...

  6. const和非const函数重载

    成员函数后面加const,表示在该函数中不能对类的数据成员进行改变,比如下面的代码: #include <stdio.h> class A { private: mutable int a ...

  7. mysql函数操作(5)

    <?php try{ $dbh = new PDO('mysql:dbname=testdb;host=localhost', 'mysql_user', 'mysql_pwd'); }catc ...

  8. Python中文显示问题

    默认pyhon使用ASCII码来解释程序的,默认不支持中文,需要在程序的第一行或者第二行声明编码. 官方解决方案:https://www.python.org/dev/peps/pep-0263/ T ...

  9. boa,thttp服务器安装,配置,测试

    boa 1, SERVER_ROOT自定义,define.h头文件中,默认“/etc/boa" 2,./configure 3,修改CC,默认CC=gcc,make 4,error util ...

  10. 查询Oracle正在执行的sql语句

    --查询Oracle正在执行的sql语句及执行该语句的用户 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, ...