文档章节

004.hive命令的3种调用方式 | ApacheCN(apache中文网)

片刻
 片刻
发布于 2014/01/13 19:18
字数 1144
阅读 29773
收藏 11

ApacheCN | apache中文网


hive命令的3种调用方式 

官网地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Cli(可参考)

方式1:hive –f  /root/shell/hive-script.sql(适合多语句)

 

hive-script.sql类似于script一样,直接写查询命令就行

 

例如:

[root@cloud4 shell]# vi hive_script3.sql

select * from t1;

select count(*) from t1;

不进入交互模式,执行一个hive script 

这里可以和静音模式-S联合使用,通过第三方程序调用,第三方程序通过hive的标准输出获取结果集。

 $HIVE_HOME/bin/hive -S -f /home/my/hive-script.sql (不会显示mapreduct的操作过程)

那么问题来了:如何传递参数呢?

demo如下:

start_hql.sh  内容:

#!/bin/bash
# -S 打印输出mapreduce日志
hive \
  -hivevar id=1  \
  -hivevar col2=2  \
  -S -f test.sql

test.sql 内容:
-- 数据库
use tmp; 
-- 表名
select * 
from tmp_jzl_20140725_test11
where 
id='${hivevar:id}' and col2='${hivevar:col2}';
 

方式2:hive -e  'sql语句'(适合短语句)

直接执行sql语句 

例如:
[root@cloud4 shell]# hive -e 'select * from t1'
静音模式:

[root@cloud4 shell]# hive -S -e 'select * from t1'  (用法与第一种方式的静音模式一样,不会显示mapreduce的操作过程)
此处还有一亮点,用于导出数据到linux本地目录下

例如:

[root@cloud4 shell]# hive -e 'select * from t1'  > test.txt
有点类似pig导出分析结果一样,都挺方便的

方式3:hive (直接使用hive交互式模式)

都挺方便的
介绍一种有意思的用法:
1.sql的语法

 

#hive     启动

 

hive>quit;     退出hive

hive> show databases;   查看数据库

hive> create database test;  创建数据库

hive> use default;    使用哪个数据库

hive>create table t1 (key string); 创建表
对于创建表我们可以选择读取文件字段按照什么字符进行分割
例如:
hive>create table t1(id ) '/wlan' 
partitioned by (log_date string)  表示通过log_date进行分区
row format delimited fields terminated by '\t'   表示代表用‘\t’进行分割来读取字段
stored as textfile/sequencefile/rcfile/;  表示文件的存储的格式

存储格式的参考地址:http://blog.csdn.net/yfkiss/article/details/7787742
textfile 默认格式,数据不做压缩,磁盘开销大,数据解析开销大。
可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。
实例:

[plain] view plaincopy

  1. > create table test1(str STRING)  

  2. > STORED AS TEXTFILE;   

  3. OK  

  4. Time taken: 0.786 seconds  

  5. #写脚本生成一个随机字符串文件,导入文件:  

  6. > LOAD DATA LOCAL INPATH '/home/work/data/test.txt' INTO TABLE test1;  

  7. Copying data from file:/home/work/data/test.txt  

  8. Copying file: file:/home/work/data/test.txt  

  9. Loading data to table default.test1  

  10. OK  

  11. Time taken: 0.243 seconds  

SequenceFile是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。
SequenceFile支持三种压缩选择:NONE, RECORD, BLOCK。 Record压缩率低,一般建议使用BLOCK压缩。
示例:

[plain] view plaincopy

  1. > create table test2(str STRING)  

  2. > STORED AS SEQUENCEFILE;  

  3. OK  

  4. Time taken: 5.526 seconds  

  5. hive> SET hive.exec.compress.output=true;  

  6. hive> SET io.seqfile.compression.type=BLOCK;  

  7. hive> INSERT OVERWRITE TABLE test2 SELECT * FROM test1;   

rcfile是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取。RCFILE文件示例:

 

 

实例:

[plain] view plaincopy

  1. > create table test3(str STRING)  

  2. > STORED AS RCFILE;  

  3. OK  

  4. Time taken: 0.184 seconds  

  5. >  INSERT OVERWRITE TABLE test3 SELECT * FROM test1;  

 

总结:
相比textfile和SequenceFile,rcfile由于列式存储方式,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应。数据仓库的特点是一次写入、多次读取,因此,整体来看,rcfile相比其余两种格式具有较明显的优势。
 

 

hive>show tables;  查看该数据库中的所有表

hive>show tables  ‘*t*’;    //支持模糊查询

 

hive>show partitions t1;  //查看表有哪些分区 

hive>drop table t1 ; 删除表

hive不支持修改表中数据,但是可以修改表结构,而不影响数据

 

有local的速度明显比没有local慢:

 

hive>load data inpath '/root/inner_table.dat' into table t1;   移动hdfs中数据到t1表中

hive>load  data local inpath '/root/inner_table.dat' into table t1;  上传本地数据到hdfs中

hive> !ls;  查询当前linux文件夹下的文件
hive> dfs -ls /; 查询当前hdfs文件系统下  '/'目录下的文件

希望通过共享自己的笔记,来找到一群和我一样愿意分享笔记和心得的朋友,让大家一起进步

我的QQ:529815144,外号:小头

 

© 著作权归作者所有

上一篇: Hive UDF整理
下一篇: hive-0.12安装详解
片刻
粉丝 107
博文 269
码字总数 306754
作品 0
海淀
高级程序员
私信 提问
005.hive: str_to_map使用案例 | ApacheCN(apache中文网)

ApacheCN apache中文网 使用说明: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF map<string,string> strtomap(text[, delimiter1, delimiter2]) Splits text in......

片刻
2015/11/12
3.8K
0
全科/elasticsearch-java

Elasticsearch Java API 手册 本手册由 全科 翻译,并且整理成电子书,支持PDF,ePub,Mobi格式,方便大家下载阅读。 阅读地址:https://es.quanke.name 下载地址:https://www.gitbook.com/b...

全科
2017/11/09
0
0
ApacheCN 翻译活动进度公告 2019.4.15

我们是一个大型开源社区,旗下 QQ 群共 9000 余人,Github Star 数量超过 20k 个,在所有 Github 组织中排名前 200,网站日 uip 超过 4k,拥有 CSDN 博客专家和简书程序员优秀作者认证。我们...

ApacheCN_飞龙
04/15
0
0
ApacheCN 翻译活动进度公告 2019.4.7

我们是一个大型开源社区,旗下 QQ 群共 9000 余人,Github Star 数量超过 20k 个,网站日 uip 超过 4k,拥有 CSDN 博客专家和简书程序员优秀作者认证。我们组织公益性的翻译活动、学习活动和...

ApacheCN_飞龙
04/07
0
0
ApacheCN 翻译活动进度公告 2019.4.23

Special Sponsors 我们是一个大型开源社区,旗下 QQ 群共 9000 余人,Github Star 数量超过 20k 个,在所有 Github 组织中排名前 200,网站日 uip 超过 4k,拥有 CSDN 博客专家和简书程序员优...

ApacheCN_飞龙
04/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

川普给埃尔多安和内堪尼亚胡的信

任性 https://twitter.com/netanyahu/status/1186647558401253377 https://edition.cnn.com/2019/10/16/politics/trump-erdogan-letter/index.htm...

Iridium
10分钟前
4
0
golang-mysql-原生

db.go package mainimport ("database/sql""time"_ "github.com/go-sql-driver/mysql")var (db *sql.DBdsn = "root:123456@tcp(127.0.0.1:3306)/test?charset=u......

李琼涛
39分钟前
4
0
编程作业20191021092341

1编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时 间。使用#define或const创建一个表示60的符号常量或const变量。通过while 循环让用户重复输入值,直到用户输入小于或等于0的值...

1李嘉焘1
39分钟前
6
0
Netty整合Protobuffer

现在我们都知道,rpc的三要素:IO模型,线程模型,然后就是数据交互模型,即我们说的序列化和反序列化,现在我们来看一下压缩比率最大的二进制序列化方式——Protobuffer,而且该方式是可以跨...

算法之名
44分钟前
18
0
如何用C++实现栈

栈的定义 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压...

BWH_Steven
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部