首页 » Hive » 正文

Hive从入门到精通-第二篇

发表于: 大数据的那些坑-BigDataBugs · 2017-8-2 ·  13 views  ·  0 replies 

hive直接执行sql语句

———————-

$>hive -e "create table myhive.t1(id int)"

hive执行脚本

———————–

1.创建hive脚本

[h.sql]

drop table myhive.t1 ;

2.执行脚本

$>hive -f h.sql

创建表语法

——————–

CREATE TABLE IF NOT EXISTS employee (eid int, name String,salary String, destination String)

COMMENT ‘Employee details’

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

LINES TERMINATED BY '\n'

STORED AS TEXTFILE;

$hive>create table myhive.t1(id int ,name string,age int)

>ROW FORMAT DELIMITED

>FIELDS TERMINATED BY '\t'

>LINES TERMINATED BY '\n'

>STORED AS TEXTFILE;

使用load命令加载本地文件到hive(hadoop),

—————————————–

语法:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 …)]

load data local inpath ~/users.dat overwrite into table t1 ; 

local //指定本地路径

overwrite //覆盖表数据(全部表数据)

partition //分区表

修改表结构

—————-

$>alter table t1 rename to t2 ; //重命名

$>alter table t1 add columns (col1 int); //添加列

$>alter table t1 change married m string ; //修改列(可以改列名)

$>alter table t1 replace married int; //替换列

$>alter table t1 drop column married; //??????删除列????????

hive脚本命令

——————–

$>hive –help //帮助

$>hive -e "xx" //一次性命令

$>hive -S -e "xx" //静态信息

$>hive -f "xx.sql"//执行脚本

$>hive -i .hiverc //-i在启动hive时,执行指定的文件。

$hive>tab //查看帮助命令

$>!cmd xx ; //执行shell命令 !echo "hello world"

$>dfs -lsr /; //执行dfs命令

$hive>set hive.cli.print.header=true ; //动态设置属性

$hive>show databases like 'my*' ; //统配符

$hive>create database db1 location '/x/x/x' //指定数据库在hdfs的位置

$hive>drop database db1 cascade //级联删除数据库

修改元数据库仓库在hdfs上的目录

———————————

[hive/conf/hive-site.xml]

<property>

<name>hive.metastore.warehouse.dir</name>

<value>/user/hive/warehouse</value>

<description>location of default database for the warehouse</description>

</property>

数据库 //目录

table //目录

数据 //文件

管理表

——————-

1.创建表,指定注释+表属性

create [external|managed] table if not exists t3(id int comment 'id is identity') 

comment 'this is a table' tblproperties('creator'='centos','ctime'='today') ;

2.desc extended t3 ; //显式扩展信息

3.desc formatted t3 ; //显式格式化信息

托管表(内部表):

外部表   :删除表时,只删除元数据,在hdfs的数据文件不会删除。放置误删表。

日志

——————-

/user/xxx/xx/t3/day=27/

/user/xxx/xx/t3/day=28

/user/xxx/xx/t3/day=29

/user/xxx/xx/t3/day=30

分区表

——————

是table目录下的子目录。

where子句指定分区条件查询时,定位到分区目录下。

//创建分区表

$hive>create table t4(id int, name string) partitioned by (province string,city string);

//显式分区

$hive>show partitions t4 ; //查看分区数据

//添加分区

$hive>alter table t4 add partition(province='hebei',city='baoding') location '…';

//删除分区

$hive>alter table t4 drop partition(province='hebei',city='baoding') ;

//插入数据到分区表

$hive>INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] …)] VALUES values_row [, values_row …];

$hive>insert into t4 partition(province='hebei',city='baoding') values(1,'tom');

//创建表,携带数据

$hive>create table user1 as select * from users ;

//创建表,携带数据

$hive>create table user2 like users;

动态分区表

—————

1.创建分区表

create table myhive.t1(id int ,name string,age int , province string , city string) 

ROW FORMAT DELIMITED 

FIELDS TERMINATED BY '\t' 

LINES TERMINATED BY '\n' 

STORED AS TEXTFILE;

2.关闭严格分区模式

动态分区模式时是严格模式,也就是至少有一个静态分区。

set hive.exec.dynamic.partition.mode=nonstrict //分区模式,默认nostrict

set hive.exec.dynamic.partition=true //开启动态分区,默认true

set hive.exec.max.dynamic.partitions=1000 //最大动态分区数,默认1000

3.执行插入数据,动态添加分区.

$hive>insert into t4 partition (province,city) select id,name,age,province,city from t1 ;

load data local inpath '/home/centos/1.txt' into table t2 ;

load data inpath 'hdfs://s201:8020/' into table t2 ;

load data inpath 'file:///home/centos/1.txt' into table t1;

hive cli 和beeline

———————

cli : 基于apache thrift 

beeline : 基于jdbc.

查看hive服务的帮助

——————-

$>hive –service cli –help //

$>hive –service cli //启动cli服务

$>hive –service hiveserver2 //启动hiveserver2服务器,使用jdbc连接。

$>hive –service hiveserver2 //启动hiveserver2服务器,使用jdbc连接。

10002 //hiveserver2 webui

10000 //hiveserver2 rpc

hive beeline客户端使用

———————–

1.关闭hiveserver2认证

[hive/conf/hive-site.xml]

<property>

<name>hive.server2.enable.doAs</name>

<value>false</value>

</property>

2.启动hiveserver2服务器

$>hive –service hiveserver2

3.启动beeline客户端,直接连接到hiveserver2,端口10000

$>beeline -u jdbc:hive2://localhost:10000/myhive

4.进入beeline cli

$beeline>

$beeline>!help //查看帮助

$beeline>!close //关闭当前连接

$beeline>!connect jdbc:hive2://localhost:10000/myhive

$beeline>!tables; //显式表

$beeline>show tables; //

$beeline>!sh clear ; //执行shell脚本命令

$beeline>!quit ; //退出beeline终端。

$beeline>select count(*) from t1 ;

$beeline>select max(*) from t1 ;

$beeline>select min(*) from t1 ;

$beeline>select sum(*) from t1 ;

$beeline>select avg(*) from t1 ;

//limit

$beeline>select * from t1 order by id limit 5,5 ;

//嵌套

$beeline>select * from (select id,name from t1) a ;

//case when等价于if / switch case

$beeline>select id , case when id < 3 then 'small'

case when id = 3 then 'three'

else 'big'

end as de from t1 ;

//

MR避免条件

——————-

1.无条件查询(没有where子句)

select * from t1 ;

2.有where子句,但是只包含分区字段.

select … where province = ''

3.让hive判断是否自动运行本地模式,默认是false

hive.exec.mode.local.auto=true

4.

hive端优化

————–

1.map端聚合

hive.map.aggr=true

2.

3.

4.

like Rlike

————

regex like 

Group by

————

$beeline>select count(*),sum(id) from t1 group by city ;

查询统计结果并动态创建表

—————————

$beeline>create table rrr as select name,count(*) cc from t4 group by name;

join

————-

0.准备数据

a.创建customers表

CREATE TABLE IF NOT EXISTS customers (id int, name String) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE ;

b.创建订单表

CREATE TABLE IF NOT EXISTS orders (id int, orderno String , price float , cid int) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE;

c.插入数据

1.内连接

$beeline>select * from t4 a join t4 b where a.id = b.id ;

插入分区表数据

—————–

$beeline>insert into t4(id,name,age) partiton(province='hebei',city='baoding') 

> select id,name,age from t1 where province='hebei' and city='baoding' ;

谓词 //> = >= 

在eclipse使用jdbc操纵hive

—————————

1.创建maven项目

2.引入hive驱动

3.jdbc

4.

本文链接: http://www.bigdatabugs.com/
0 喜欢+
«上一篇: :下一篇»

相关文章

Hive从入门到精通-第四篇

hive ———- 1.事务支持 stored as tex...

Hive从入门到精通-第三篇

beeline ———— 0.hive $>hiv...

Hive从入门到精通-第一篇

Hive —————- The Apache H...

  1. 还没有任何评论,你来说两句吧

留个评论