Hive(2)基本操作

本文详细介绍了在Hive中执行shell和hdfs命令,包括创建、修改和删除数据库与表,加载与导出数据,以及执行简单和复杂查询。重点讨论了内部表、外部表、分区表和分桶表的概念,提供了具体的示例操作。
摘要由CSDN通过智能技术生成

目录

1 在Hive中执行shell命令和hdfs命令

执行shell命令

执行hdfs命令

2 DDL操作

1.Hive中的数据库

2.创建表

创建内部表

分区表

静态分区表

分桶表

3.修改表

重命名表

增加列

改变列

替换列

增加分区

删除分区

3 DML操作

源数据

1.加载数据

put

load

2.从hdfs上传

2.导出数据

导出数据到本地

带分隔符的导出

导出数据到HDFS

3.查询数据

3.1 简单查询

创建表并加载数据

1.某字段的查询

2.运算查询

3.过滤条件

4.分组

5.排序

3.2 复杂查询

1.JOIN操作

2.UNION ALL

3.嵌套查询


登录Hadoop和Hive

[ww@master ~]$ start-all.sh

This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh

Starting namenodes on [master]

master: starting namenode, logging to /home/yao/hadoop-2.7.7/logs/hadoop-yao-namenode-master.out

slave: starting datanode, logging to /home/yao/hadoop-2.7.7/logs/hadoop-yao-datanode-slave.out

Starting secondary namenodes [0.0.0.0]

0.0.0.0: starting secondarynamenode, logging to /home/ww/hadoop-2.7.7/logs/hadoop-ww-secondarynamenode-master.out

starting yarn daemons

starting resourcemanager, logging to /home/yao/hadoop-2.7.7/logs/yarn-ww-resourcemanager-master.out

slave: starting nodemanager, logging to /home/yao/hadoop-2.7.7/logs/yarn-ww-nodemanager-slave.out

 

[ww@master ~]$ jps

19123 NameNode

19960 Jps

19532 ResourceManager

19359 SecondaryNameNode

[ww@master ~]$ hive

hive>

 

1 在Hive中执行shell命令和hdfs命令

执行shell命令

/home/ww

hive> ! pwd;

/home/ww

hive> ! echo "hello world!";

"hello world!"

hive> ! ls /home/ww/hadoopdata;

dfs

用户可以执行简单的bash shell命令,只要在命令前加上!并且以分号结尾。Hive CLI不能使用需要用户进行输入的交互式命令,而且不支持shell的“管道符”功能和文件名的自动补全功能。

执行hdfs命令

hive> dfs -ls /;

Found 7 items

drwxr-xr-x - ww supergroup 0 2019-05-08 12:09 /0506

-rw-r--r-- 3 ww supergroup 14 2019-05-08 11:02 /0507

drwxr-xr-x - ww supergroup 0 2019-05-08 19:40 /0514

drwxr-xr-x - ww supergroup 0 2019-05-09 16:51 /data

drwxr-xr-x - ww supergroup 0 2019-05-13 17:24 /student2

drwx------ - ww supergroup 0 2019-05-13 15:40 /tmp

drwxr-xr-x - ww supergroup 0 2019-05-13 16:42 /user

 

需要把hadoop关键字去掉,加上dfs,然后以分号结尾。(这种使用hadoop命令的方式实际上比与其等价的在bash shell中执行的hadoop fs命令更加高效)

2 DDL操作

1.Hive中的数据库

hive> show databases;

OK

default

Time taken: 0.486 seconds, Fetched: 1 row(s)

 

  • 创建数据库
hive> create database yw;

OK

Time taken: 0.401 seconds

hive> create database yw_test;

OK

Time taken: 0.084 seconds

hive> show databases;

OK

default

yw

yw_test

Time taken: 0.037 seconds, Fetched: 3 row(s)

如果数据库存在,则抛出异常

ive> create database if not exists ducl;

OK

Time taken: 0.112 seconds

 

如果数据库很多,可以使用正则表达式,模糊匹配

hive> show databases like 'yw*';

OK

yw

yw_test

Time taken: 0.054 seconds, Fetched: 2 row(s)

 

  • 查看数据库描述信息

查看数据库具体信息

hive> describe database yw;

OK

yw hdfs://master:9000/user/hive/warehouse/yw.db ww USER

Time taken: 0.041 seconds, Fetched: 1 row(s)

hive> dfs -ls /user/hive/warehouse;

Found 3 items

drwxr-xr-x - ww supergroup 0 2019-05-13 16:44 /user/hive/warehouse/ducl.db

drwxr-xr-x - ww supergroup 0 2019-05-13 16:42 /user/hive/warehouse/yw.db

drwxr-xr-x - ww supergroup 0 2019-05-13 16:42 /user/hive/warehouse/yw_test.db

hive> drop database yw_test;

OK

Time taken: 0.305 seconds
  • 删除数据库
hive> drop database yw_test; OK Time taken: 0.627 seconds

删除带有表的数据库

1)先删表再删库

2)直接强制删除

hive> drop database yw_test;

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database yr_test is not empty. One or more tables exist.)

hive> drop database yr_test cascade;

OK

Time taken: 2.873 seconds

 

2.创建表

建表示例

内部表和外部表

未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);

区别:

1)内部表的生命周期以及数据都由Hive自身管理,就是内部表的表结构和表中的数据都是由hive进行管理的。如果删除了内部表,那么内部表中的数据也会别删除。外部表只有表结构是hive进行管理的,数据由HDFS管理,如果删除hive中的外部表,那么表结构会删除,但是不会删除表中的数据。

2)删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;

3)对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

4)内部表的数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),但是内部表和外部表都可以自己指定存储位置;

 

创建内部表

hive> use yw;

OK

Time taken: 0.035 seconds

hive> create table student(

> id int,

> name string,

> age int)

> row format delimited //默认的hive的语句

> fields terminated by '\t' //字段与字段间用制表符分隔

> stored as textfile; //文件类型

OK

Time t
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值