Hive仓库基本操作

1.hive中可以执行shell命令

用户可以直接在hive中执行shell命令,只需要使用!开始,使用(;)结尾

!/bin/echo"what up dog" ;

! pwd

使用--开头表示注释

--This is a comment!

2.显示字段名称

hive默认是不显示字段名称的,可以使用hive.cli.print.header为true进行配置

3.执行dfs命令

用户可以在cli中执行hadoop命令,只需要将hadoop的去掉即可,用分号(;)结尾

dfs  -ls /;

4.数据类型和文件格式数据类型

所有的数据类型都是Java接口的实现,所有所有的具体行为细节和实现与对应的java是一致的。

BINARY和关系型数据库VARBINARY数据类型相似,但是和BLOB数据类型不同,因为BINARY的列是存储在记录中的,而BLOB不是,BLOB是一个可以存储二进制文件的容器。

集合的数据类型,STRUCT{FIELD1 string,FIELD2}那么第一个字段可以通过元素来引用。

集合类型主要包括:array,map,struct等,hive的特性支持集合类型,这特性是关系型数据库所不支持的,利用好集合类型可以有效提升SQL的查询速率。

create table t_person(

id int,

name string,

likes array  )

row format delimited

fields terminated by ','

collection items terminated by '_';

load data local inpath 'Documents/hive/t_person.txt' into tablet_person;

导入数据格式

  1,王力宏,唱歌_钢琴_二胡_作曲_演戏_导演_书法

create table t_person(

id int,

name string,

tedia map  )

row format delimited

fields terminated by ','

collection items terminated by '_'

map keys terminated by ':';

1,王力宏,性别:男_形象:非常健康

create table t_person(

id int,

name string,

address struct  )

row format delimited

fields terminated by ','

collection items terminated by '_';

1,王力宏,台湾省_台北市

HiveQL数据操作

hive不支持行级插入操作、更新和删除,也不支持事务,除此外,和基本数据库一致。

在创建表的最后可以指定HDFS的存储路径,使用通常的创建创建的都是管理表,也叫内部表

创建外部表,createexternal table来创建外部表,在删除内部表,会把元数据和数据全部删除,但是创建外部表删除只会删除元数据。

分区表

Hive中的查询一般会扫描到整个表,有时只需要扫描部分数据引入了分区表。

通常使用分区来分散水平压力,将数据从物理上转移到距使用最频繁的用户更近的地方,分区还可以将数据进行分层存储。

使用partitioned关键字进行分区,创建一个分区,就会在HDFS中创建一个相应的文件夹。

同时也可以创建外部分区表,同时hive可以自定义表的存储格式,例如存储为文本格式,storedas  textfile

桶表

hive采用的是Hash值,然后除以桶的个数求余的方式决定该条记录应该存储于哪一个桶中

HiveQL数据操作

从HDFS上导入数据到Hive

hadoop fs -put /home/zkpk/empmessages    /data/emp_messages

使用overwrite关键字可以覆盖原理的表

insert overwrite table emp_meaages select * from old_emp_meaages

其他查询语句和平常的mysql查询语句是一致的。

union all

hive不支持union操作,只支持unionall语句

select c.uid,c.keyword  from  (select a.uid,a.key from table1) unionall  (select a.uid,a.key from table2)

hive的join只支持等值连接

抽样查询

随机抽样

使用RAND()函数和LIMIT关键字来获取样例数据,使用DISTRIBUTE和SORT关键字来保证数据是随机分散到mapper和reducer的。ORDERBY RAND()语句可以获得同样的效果,但是性能没这么高。

1. Random sampling

使用RAND()函数和LIMIT关键字来获取样例数据。使用DISTRIBUTE和SORT关键字来保证数据是随机分散到mapper和reducer的。ORDERBY RAND()语句可以获得同样的效果,但是性能没这么高。

SELECT * FROM DISTRIBUTE BY RAND() SORT BYRAND()  LIMIT ;

2. Bucket table sampling

该方式是最佳化采样bucket表。RAND()函数也可以用来采样整行。如果采样列同时使用了CLUSTEREDBY,使用TABLESAMPLE语句会更有效率。

SELECT * FROM   TABLESAMPLE(BUCKET OUT OF ON [colname|RAND()]) table_alias;

1)使用下面的语句,从表lxw111中取样50%的数据,创建一个新表:

CREATE TABLE lxw1234 AS

SELECT * FROM lxw1 TABLESAMPLE (50 PERCENT);

2)这种方式指定取样数据的大小,单位为M。比如,下面的语句:

SELECT * FROM lxw1 TABLESAMPLE (30M);

3)这种方式可以根据行数来取样,但要特别注意:这里指定的行数,是在每个InputSplit中取样的行数,也就是,每个Map中都取样nROWS。

SELECT * FROM lxw1 TABLESAMPLE (200 ROWS)

4) table_sample: TABLESAMPLE (BUCKET x OUT OF y [ON colname])

如果基于一个已经分桶表进行取样,将会更有效率。

执行下面的语句,创建一个分桶表,并插入数据:

CREATE TABLE lxw1_bucketed (pcid STRING)

CLUSTERED BY(pcid) INTO 10 BUCKETS;

INSERT overwrite TABLE lxw1_bucketed

SELECT pcid FROM lxw1;

表lxw1_bucketed按照pcid字段分成10个桶,下面的语句表示从10个桶中抽样第一个桶的数据:

SELECT COUNT(1) FROM lxw1_bucketed TABLESAMPLE(BUCKET 1 OUT OF 10 ONpcid);

HiveQL视图与索引

hive中的视图与索引和mysql中的基本一致

Hive中的函数

Create Temporary Function

CREATE TEMPORARY FUNCTION function_name AS class_name;

将包添加到当前环境

hive>add jar /opt/lib/hive-train-1.0.jar;

创建一个临时函数


hive>CREATE TEMPORARY FUNCTION sayHello AS'com.zhaotao.bigdata.hive.HelloUDF'

hive>show functions;

hive>desc function sayHello;

hive>select ename,sayHello(ename) from emp;

使用java继承UDF编写自定义函数

import java.text.SimpleDateFormat;

import java.util.Date;

import org.apache.hadoop.hive.ql.exec.UDF;

import org.junit.Test;

public class UDFZodiacSign extends UDF {

private  SimpleDateFormat df ;

public UDFZodiacSign() {

df = new SimpleDateFormat("MM-dd-yyyy");

}

public  String evaluate(Date bday){

return evaluate(bday.getMonth(),bday.getDay());

}

public  String evaluate(String bday){

Date date =null;

try{

date = df.parse(bday);

}

catch(Exception ex){

System.out.println("异常");

ex.printStackTrace();

return null;

}

return evaluate(date.getMonth()+1,date.getDay());

}

public  String evaluate(Integer month,Integer day){

if(month ==1){

if(day<20){

return "Capricorn";

}else{

return "Aquarius";

}

}

if(month ==2){

if(day<19){

return "Capricorn";

}else{

return "Pisces";

}

}

if(month ==3){

if(day<20){

return "Pisces";

}else{

return "Aries";

}

}

if(month ==4){

if(day<20){

return "Aries";

}else{

return "Taurus";

}

}

if(month ==5){

if(day<20){

return "Taurus";

}else{

return "Gemini";

}

}

if(month ==6){

if(day<21){

return "Gemini";

}else{

return "Cancer";

}

}

if(month ==7){

if(day<22){

return "Cancer";

}else{

return "Leo";

}

}

if(month ==8){

if(day<23){

return "Leo";

}else{

return "Virgo";

}

}

if(month ==9){

if(day<22){

return "Virgo";

}else{

return "Libra";

}

}

if(month ==10){

if(day<24){

return "Libra";

}else{

return "Scorpio";

}

}

if(month ==11){

if(day<22){

return "Scorpio";

}else{

return "Sagittarius";

}

}

if(month ==12){

if(day<22){

return "Sagittarius";

}else{

return "Capricorn";

}

}

return null;

}

@Test

public void test() {

UDFZodiacSign aa = new UDFZodiacSign();

String str = aa.evaluate("01-10-2004");

System.out.println(str);

}

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容