Hive的DDL

发布 : 2016-02-12 分类 : 大数据 浏览 :

DDL:

1
2
1) 数据定义语言是Hive HQL的子集,是在hive在描述创建数据结构的
2) 在Hive DDL语句中大多数以关键词CREATE、DROP、ALTER开头
1
2
Hive的数据结构分层:
4个层次:

Database:如何创建?

1
2
3
4
表必须隶属于某个数据库
每个数据库必须有对应的目录在HDFS文件系统上
在hive上默认的数据库为'default'
默认数据库在文件系统上的目录是'/user/hive/warehouse';

创建数据库:

1
2
3
4
5
6
7
8
hive> create database if not exists hive;
对于default数据库在H
DFS文件系统上的存储路径为/user/hive/warehouse
hive-site.xml中的默认配置
hive.metastore.warehouse.dir该参数所配
对于自己创建的数据库的存储路径是哪呢?
/user/hive/warehouse/hive.db
hive.db为我们自己创建数据库的名称,然后以.db为后缀结尾的一个文件夹
1
hive> create database hive2 location '/my/directory'

查看数据库注释和存储路径

1
hive> describe database hive;

创建数据库的同时添加注释

1
hive> create database hive3 comment 'it is my database' WITH DBPROPERTIES('creator'='kaka','date'='2018-05-30');
1
2
dbproperties
DBPROPERTIES

查看详细的数据库注释和存储路径

1
hive> describe database extended hive;

查询所有的数据库

1
hive> show databases;

模糊查询所有的数据库中以hive开头命名的数据库

1
hive> show databases like 'hive';

更改hive3数据库的注释

1
2
hive> alter database hive3 set dbproperties('edited-by'='MEIXI');
hive> describe database extended hive3;

删除数据库

1
drop database hive3;

创建表(注意:创建表之前要指定数据库)

1
2
3
hive> create table a(id int,name string);
OK
Time taken: 0.44 seconds

同时删除数据库和表

1
drop database hive2 cascade;
1
2
3
4
5
删除数据库的时候,cascade一定要慎用

每个表都在HDFS文件系统上有对应的目录

表在HDFS文件系统上的目录为'/user/hive/warehouse/[db.name](数据库名称)/table';

创建表,同时指定要字段,以及字段之间的分割符(‘\t’制表符)

1
2
3
4
5
hive> create table emp(empno int,ename string,job string,mgr int,hiredate string,sal double,
comm double,deptno int)
row format delimited fields terminated by ',';
OK
Time taken: 0.296 seconds
1
2
3
4
5
6
7
8
9
10
11
hive> desc emp;
OK
empno int
ename string
job string
mgr int
hiredatestring
sal double
commdouble
deptno int
Time taken: 0.407 seconds, Fetched: 8 row(s)
1
2
3
4
[root@node1 hive-1.2.1]# vi emp.txt
[root@node1 hive-1.2.1]# cat emp.txt
7379SMITH CLIERk 79021980-12-17 800 20
7692ALLEN MANAGER 79821981-2-20 1600.00 300.00 30

将emp.txt文件中的数据导入emp表中

1
2
3
4
5
hive> load data local inpath '/opt/modules/hive-1.2.1/emp.txt' overwrite into table emp;
Loading data to table default.emp
Table default.emp stats: [numFiles=1, numRows=0, totalSize=126, rawDataSize=0]
OK
Time taken: 1.086 seconds
1
2
3
4
[root@node1 hive-1.2.1]# vi emp.txt
[root@node1 hive-1.2.1]# cat emp.txt
7379,SMITH,CLIERk,7902,1980-12-17,800,20
7692,ALLEN,MANAGER,7982,1981-2-20,1600.00,300.00,30
1
2
3
4
5
6
hive> select * from emp;
OK
7379SMITHCLIERk79021980-12-17800.020.0NULL
7692ALLENMANAGER79821981-2-201600.0300.030
NULLNULLNULLNULLNULLNULLNULLNULL
Time taken: 0.14 seconds, Fetched: 3 row(s)
1
hive> drop table emp;

(1)查看表结构

1
hive> desc emp;

(2)查看表的详细结构

1
hive> desc extended emp;

(3)查看表结构(推荐使用这种方式查看,简洁明了)

1
hive> desc formatted emp;

更改表名

1
hive> ALTER TABLE emp RENAME TO emptest;

删除表

1
2
hive> drop table emptest;
hive> show tables;

创建一个新表并将emp_bak的数据导入新表中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
hive> create table emp_managed as select * from emp;
Query ID = root_20160311082709_61648203-5965-4219-ae5e-4c5748966d1c
Total jobs = 3
Launching Job 1 out of 3
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_1457654255652_0001, Tracking URL = http://node5:8088/proxy/application_1457654255652_0001/
Kill Command = /opt/modules/hadoop-2.5.1/bin/hadoop job -kill job_1457654255652_0001
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0
2016-03-11 08:28:01,002 Stage-1 map = 0%, reduce = 0%
2016-03-11 08:28:29,956 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 2.77 sec
MapReduce Total cumulative CPU time: 2 seconds 770 msec
Ended Job = job_1457654255652_0001
Stage-4 is selected by condition resolver.
Stage-3 is filtered out by condition resolver.
Stage-5 is filtered out by condition resolver.
Moving data to: hdfs://matrix/usr/hive-1.2.1/warehouse/.hive-staging_hive_2016-03-11_08-27-09_038_7401835710561722844-1/-ext-10001
Moving data to: hdfs://matrix/usr/hive-1.2.1/warehouse/emp_managed
Table default.emp_managed stats: [numFiles=1, numRows=3, totalSize=122, rawDataSize=119]
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Cumulative CPU: 2.77 sec HDFS Read: 3586 HDFS Write: 198 SUCCESS
Total MapReduce CPU Time Spent: 2 seconds 770 msec
OK
Time taken: 82.623 seconds
1
hive(hive)> select * from emp_managed;
1
2
3
4
5
6
hive> select * from emp_managed;
OK
7379SMITHCLIERk79021980-12-17800.020.0NULL
7692ALLENMANAGER79821981-2-201600.0300.030
NULLNULLNULLNULLNULLNULLNULLNULL
Time taken: 0.172 seconds, Fetched: 3 row(s)
1
2
3
在命令行下查看HDFS文件系统目录/user/hive/warehouse/hive.db/emp_managed上是否有MapReduce程序运行之后创建的文件
[matrix@hadoop-matrix ~]$ cd /data/modules/hadoop-2.7.1
[matrix@hadoop-matrix hadoop-2.7.1]$ ./bin/hdfs dfs -ls /user/hive/warehouse/hive.db/emp_managed
1
2
3
4
5
查看HDFS文件系统目录/user/hive/warehouse/hive.db/emp_managed下的000000_0文件
[matrix@hadoop-matrix hadoop-2.7.1]$ ./bin/hdfs dfs -text /user/hive/warehouse/hive.db/emp_managed/000000_0
15/09/23 03:35:34 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
7379SMITHCLIERk79021980-12-17800.020.0\N
7692ALLENMANAGER79821981-2-201600.0300.030
1
2
3
hive中的数据有两种:
## 一种是hive的数据,通常指的是HDFS上的数据
## 一种是元数据,元数据是存在mysql上面的

[root@hadoop-matrix mysql-libs]# rpm -qa|grep mysql
[root@hadoop-matrix mysql-libs]# sudo more /root/.mysql_secret

The random password set for the root user at Tue Sep 22 17:52:04 2015 (local t

ime): 1SPhNzl162ril_lJ

连接mysql

1
2
3
mysql -uroot -p123456

mysql> show databases;

删除数据库

1
2
hive> drop table emp_managed;
hive> drop table emp;

查看文件系统目录上还有没有文件

1
TABLS:drop table时,hdfs和hive元数据表均被删除

外部表和内部表有什么区别?

1
2
3
4
5
6
7
8
9
[matrix@hadoop-matrix hive-1.2.1]$ hive

Logging initialized using configuration in jar:file:/data/modules/hive-1.2.1/lib/hive-common-1.2.1.jar!/hive-log4j.properties

#log4j.appender.EventCounter=org.apache.hadoop.metrics.jvm.EventCounter
log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter
mv hive-log4j.properties.template hive-log4j.properties

desc formatted emp;

创建一个外部表:

1
2
3
4
5
6
7
8
9
10
hive> create external table emp_external(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int)row format delimited fields terminated by '\t'
location '/hive_external_tmp/emp/';

在HDFS文件系统上创建目录

1
2
./bin/hdfs dfs -mkdir -p /emp_external_tmp/emp/
./bin/hdfs dfs -put emp.txt /emp_external_tmp/emp/
1
hive> describe formatted emp_external;

删除外部表

1
hive> drop table emp_external;
1
2
3
4
内部表:drop table时,hdfs和hive元数据表均被删除
外部表:drop table时,hdfs文件不动,hive元数据删除(推荐多用,以防不测)
哪个更安全?
外部表!
本文作者 : Matrix
原文链接 : https://matrixsparse.github.io/2016/02/12/hive的DDL/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

知识 & 情怀 | 二者兼得

微信扫一扫, 向我投食

微信扫一扫, 向我投食

支付宝扫一扫, 向我投食

支付宝扫一扫, 向我投食

留下足迹