Hive学习-Hive基本操作(建库、建表、分区表、写数据)

hive简单认识

Hive是建立在HDFS之上的数据仓库,所以Hive的数据全部存储在HDFS上。

Hive的数据分为两部分,一部分是存在HDFS上的具体数据,一部分是描述这些具体数据的元数据信息,一般Hive的元数据存在MySQL上。

Hive是类SQL语法的数据查询、计算、分析工具,执行引擎默认的是MapReduce,可以设置为Spark、Tez。

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

1、进入hive命令行

$cd  $HIVE_HOME/bin

$./hive

注意:CRT软件进入到hive命令行模式的时候默认不支持回退修改命令,需要修改CRT的会话选项:

2、创建数据库

hive> create  database  IF NOT EXISTS  test  COMMENT '测试数据库'  LOCATION '/ruozedata' WITH DBPROPERTIES ('creater'='liuzd','date'='20180605');

IF NOT EXISTS:如果不存在则创建

COMMENT:添加注释

LOCATION:指定hdfs存放路径

WITH DBPROPERTIES:添加自定义属性

3、查询数据库信息

hive> desc database  extended test;

4、删除数据库

hive> drop database test CASCADE;

cascade:级联删除库下的表,默认会提示报错(值为RESTRICT),生产不建议使用

5、修改数据库

hive> alter database test set location '/ruozedata';

注意:根据hive版本不同,hive支持的SQL也不一样,官网内容如下:

6、数据库切换

hive> use test;

7、常用数据类型

int:整型 

bigint:长整型

float:浮点型

double:双精度

string:字符串

8、创建表

hive> CREATE EXTERNAL TABLE ruozedata_person

    > (id int comment 'this is id', name string comment 'this id name' )

    > comment 'this is ruozedata_person'

    > ROW FORMAT DELIMITED

    > FIELDS TERMINATED BY '\t'

  > location  '/user/hive/warehouse/test.db/emp';

EXTERNAL:创建外部表的关键字,默认是内部表

comment:添加注释,跟在字段后就是字段的注释,跟在表后就是表的注释

ROW FORMAT DELIMITED  FIELDS TERMINATED BY '\t':指定加载数据的列分隔符为制表符

location:指定表数据存放路径

like方式创建表,复制表结构

hive> CREATE external table ruozedata_emp2 like emp location '/user/hive/warehouse/test.db/emp';

select方式创建表,可以顺带复制数据

hive> create table emp2 as select * from emp;

9、查看表结构

hive> desc formatted ruozedata_person;

10、修改表

修改表名:

hive> alter table ruozedata_person rename to person;

hive> show tables

修改字段:

hive> CREATE TABLE test_change (a int, b int, c int);

// First change column a's name to a1.

hive> ALTER TABLE test_change CHANGE a a1 INT;

// Next change column a1's name to a2, its data type to string, and put it after column b.

hive> ALTER TABLE test_change CHANGE a1 a2 STRING AFTER b;

// The new table's structure is:  b int, a2 string, c int.

// Then change column c's name to c1, and put it as the first column.

hive> ALTER TABLE test_change CHANGE c c1 INT FIRST;

// The new table's structure is:  c1 int, b int, a2 string.

// Add a comment to column a1

hive> ALTER TABLE test_change CHANGE a1 a1 INT COMMENT 'this is column a1';

11、删除表

hive> drop table person;

12、加载数据

hive> LOAD DATA LOCAL INPATH '/home/hadoop/emp.txt' OVERWRITE INTO TABLE emp;

LOCAL:指定文件为本地文件,默认为HDFS文件系统

OVERWRITE:覆盖写入到表中,默认追加

13、insert方式插入数据(追加)

hive> insert into emp2 select * from emp;

14、insert方式插入数据(覆盖)

hive> insert overwrite table emp2 select * from emp;

注意:emp2和emp结构要一致,字段顺序要一致。

15、insert  into values

hive> insert into a(id,name) values(1,'ruoze');

注意:insert into  values的方式不是直接写数据到原表上,而是新建临时表存储数据,然后把数据cp一份到目标表的路径里。

16、数据查询

group by

求每个部门的平均工资大于2000的部门

hive> select deptno, avg(salary)  from emp group by deptno having avg(salary)>2000;

case when then

hive> select ename,salary,

    > case

    > when salary>1 and salary<=1000 then 'lower'

    > when salary>1000 and salary<=2000 then 'middle'

    > when salary>2000 and salary<=4000 then 'high'

    > else 'highest'

    > end

    > from emp;

join查询

inner join==join

full join

left join

right join

17、分区表(静态分区)

hive> create table emp_patition(

    > empno                  int,                                       

    > ename                  string  ,                                   

    > job                    string ,                                   

    > mgr                    int      ,                                 

    > hiredate                string    ,                                 

    > salary                  double    ,                                 

    > comm                    double   

    > )

    > partitioned by (deptno int)

    > row format delimited fields terminated by '/t';

hive> alter table emp_patition rename to emp_partition;

insert into select方式插入分区表数据

查看分区表HDFS存储

insert  overwrite table方式插入数据

18、分区表(动态分区)

hive> create table emp_patition2(

    > empno                   int,                                       

    > ename                   string  ,                                   

    > job                     string ,                                   

    > mgr                     int      ,                                 

    > hiredate                string    ,                                 

    > salary                  double    ,                                 

    > comm                    double   

    > )

    > partitioned by (deptno int)

    > row format delimited fields terminated by '/t';

hive> alter table emp_patition rename to emp_partition;

注意:insert into=insert into table,动态分区需要设置参数set hive.exec.dynamic.partition.mode=nonstrict,否则插入报错。动态分区和静态分区没有任何区别,除了以上设置和数据的录入方式以外。

注意:动态分区要求分区字段的位置要放在select最后一个,如果是多级分区则按照顺序放到最后,不要求名称一致。

19、多级分区表

hive> create table emp_mulit_partition(

    > empno                  int,

    > ename                  string)

    > partitioned  by (deptno int,job string)

    > row format delimited fields terminated by '/t';

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

推荐阅读更多精彩内容