我爱编程

Hive的基本操作

2018-03-28  本文已影响0人  有一束阳光叫温暖

一、hive指令基本操作

清屏:Ctrl+L 或者 !clear

查看数据仓库中的表:show tables;

查看数据仓库中内置的函数:show functions;

查看表结构:desc 表名

查看HDFS上文件:dfs -ls

执行linux指令:!+指令

执行HQL语句:select 

执行SQL的脚本:source SQL文件

二、hive的DDL操作、

a.分割符

create table jiametest(uid string,name string)row format delimited fields terminated by ',';

b.单分区

create table jiametest1(uid string,name string)partitioned by (country String)row format delimited fields terminated by ',';

LOAD DATA local INPATH  'path' INTO TABLE tablename partition(country='USA');

c.双分区

create table jiametest1(uid string,name string)partitioned by (sex String,hour String);

LOAD DATA local INPATH 'path' INTO TABLE tablename partition(sex='男',hour='01');

d.分桶

#指定开启分桶

set hive.enforce.bucketing = true;

set  mapreduce.job.reduces = 4 ;

 先创建 一个学生表

create table students(Sno int,Sname String,Sex String,Sage int, Sdept String)row format delimited fields terminated by ',';

导入数据

LOAD DATA local INPATH ' /home/linwentao/desktop/hivedata/students.txt' INTO TABLE students;

e.外部表

EXTERNAL 关键子可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION)

Hive 创建内部表时,会将数据移动到数据仓库指向的路径,若创建外表表,仅仅记录数据所在的路径,不对数据的位置做任何改变,在删除表时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据

LIKE 允许用户复制现有的表结构,但是不复制数据

f.修改表

//一次添加一个分区

增加分区:ALTER TABLE tablename ADD PARTITION(dt='20170101')location 'path';

//一次添加多个个分区

ALTER TABLE tablename ADD PARTTITION(dt='2008-08-08',country='us')location

'path' PARTITION(dt='2008-08-09',country='us')location 'path';

删除分区

ALTER TABLE tablename DROP IF EXISTS PARTITION(dt='2008-08-08');

ALTER TABLE tablename DROP IF EXISTS PARTITION(dt='2008-08-08',country='us');

修改分区

ALTER TABLE tablename PARTITION(dt='2008-08-08')RENAME TO PARTITION(dt='20080808');

添加列

ALTER TABLE tablename ADD | REPLACE COLUMNS(col_name STRING);

修改列

test(a int,b int,c int);

//修改a 字段名

ALTER TABLE test CHANGE a a1 INT;

//修改a 的字段并且在b的后面

ALTER TBALE test CHANGE a a1 STRING AFTER b;

//修改b位置

ALTER TABLE test CHANGE b b1 INT  FIRST;

// 表重命名

ALTER TABLE test RENAME TO new_test;

三 、hive的DML操作

3.1.Load

在将数据加载到表中时,hive不会进行任何转换。加载操作是将数据文件移动到与hive表对应的位置的纯复制、移动操作

语法结构

      LOAD DATA [LOCAL] INPATH 'filename' [OVERWRITE] INTO TABLE table [PARTITION (partcol=val1,partcol2=val2...)]

说明:

a.filepath

相对路径,例如:project/datal

绝对路径, 例如:/user/hive/project/datal

完整UIR,  例如:hdfs://namenode:9000/user/hive/project/datal

    filepath 可以引用一个文件(在这种情况下,hive将文件移动到表中)或者它可以一个目录(在这种情况下,hive将吧目录中的所有文件移动到表中)

b.LOCAL

如果指定了local,load命令将在本地文件系统中查找文件路径

load 命令会将filepath中的文件复制到目标文件系统中目标文件系统由表的位置性决定,被复制的数据文件移动到表的数据对应的位置。

如果没有指定LOCAL关键字,如果filepath指向的是一个完整的URI,hive会直接使用这个URI。否则:如果没有指定schama或者authority,hive会使用在hadoop配置文件定义的schama和authority,fs.default.name指定了namenode的url

c.OVERWRITE

如果使用overwrite关键字,则目标表(或者分区)中的内容会被删除,然后再将filepath指向文化/目录中的内容添加到表/分区

如果目标表已经有一个文件,并且文件名和filepath中的文件名冲突,那么现有的文件会被新文件所代替。

3.2.insert

hive中insert主要结合select查询语句使用,将查询结果插入到表中,例如:

insert overwrite table stu_buck select * from student cluster by(Sno);

需要保证查询结果列的数目和需要插入数据表格的列数目一致,如果查询出来的数据类型和插入表格对应的列数据类型不一致,将会进行转换,但不能保证转换一定成功,转换失败的数据将会为null.

可以将一个表查询出来的数据插入原表中,结果相对于自我复制一份数据。

a.multo inserts 多重插入:

from source_table

insert overwrite table tablename1 [partition (partcol1=val1,partcol2=val2)]

select_statement1

insert overwirte table tablename2 [partition (partcol1=val1,partcol2=val2)]

select_statement2...

b.Dynamic partition inserts 动态分区插入:

INSERT OVERWRITE TABLE tablename PARTITION (partcol1=[val1],partcol=[val2]...)

select_statement FROM from_statement

动态分区是通过位置来对应区值的。原始表select出发的值和输出partition的值的关系仅仅是通过位置来确定的和名字并没有关系。

c.导出表数据

INSERT OVERWRITE [LOCAL]DIRECTORY directory1 SELECT .. FROM ...

multiple inserts"

FROM from_statement

INSERT OVERWEITE [LOCAL]DIRECTORY directory1 select_statement1

[INSERT OVERWRITE[LOCAL]DIRECTORY directory2 select_statement2]..

3.3 select

SELECT [ALL | DISTINCT] select_expr, select_expr, ...

FROM table_reference

[WHERE where_condition]

[GROUP BY col_list]

[HAVING having_condition]

[CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list]]

[LIMIT number];

上一篇下一篇

猜你喜欢

热点阅读