DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用
1、创建数据库:
括号里面的2个里选一个
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] <database name>
2、删除数据库:
中括号表示可写可不写
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name
3、对表的字段进行更改
Alter
4、使用数据库
use database_name
与传统的sql语句是一样的
hive的数据类型2部分:
1、struct,map,Array(都是集合类型)
其中struct:可以通过struct.key来获取值,并且struct也可以存不同种类型的数据
2、int,float,string...基本数据类型
hive的创建表:
注意要对齐否则报错
1、
create table MK(
name String,
agx float,
sub array<String>,
de map<String,float>,
ad struct<street:String,city:String,zip:int>
)
row format delimited #格式化
fields terminated by ‘\t’ #每列之间使用tab健进行分割
lines terminated by ‘\n’ #每行之间使用回车换行
stored as textfile; #保存成textFile文件的格式
2、
create table MK(
name String,
agx float,
sub array<String>,
de map<String,float>,
ad struct<street:String,city:String,zip:int>
)
row format delimited #格式化下
fields terminated by ‘|’ #每列之间用|健进行分割
collection items terminated by ‘,’ #数组集合的值用’,’进行分割
map keys terminated by ‘:’ #map集合的key:value用’:’进行分割
lines terminated by ‘\n’ #每行之间用回车进行分割
stored as textfile #保存成textFile文件的格式
location ‘/data’ #保存到该目录中,不保存到默认的 目录中
原始数据data.txt:
wang|123|a1,a2,a3|:1,:2|s1,s2,s3
将本地数据加载到hive的表中:
load data local inpath ‘/~/~/~/data.txt’ overwrite into table 表名;
overwrite :如果不加覆盖就是将数据在后面进行追加
创建表举例:
一、
data.txt中的数据
1,xiaoMing,book-tv-code,beijing:chaoYang-shanghai:puDong
2,leiLei,book-code,huoXing:xxx-shanghai:puDong
3,fangFang,leiLei-shop,huoXing:xxx
二、
我的原始数据是上面的格式,此时我根据数据建立合适的表
create table psn1(
id int,
name String,
likes Array<String>,
address Map<String,String>
)
row format delimited
fields terminated by ‘,’ //我们将上面的原始数据按照','进行分割,分成4个字段
collection items terminated by ‘-’ //我们将上面的第3个字段定义成了数组,因此要对该数组进行分割
map keys terminated by ‘:’ //我们将上面的第4个字段定义成了Map,因此要对Map进行分割
三、
此时我将原始数据导入进表格中:
load data local inpath '/home/data' overwrite into table psn1;
四、
再查询select * from psn1,可以发现是这样的格式了
1 xiaoMing ["book","tv","code"] {"beijing":"chaoYang","shanghai":"puDong"}
2 leiLei ["book","code"] {"huoXing":"xxx","shanghai":"puDong"}
3 fangFang ["leiLei","shop"] {"huoXing":"xxx"}
创建表的其他方式:
1、
create table 表名1 like 表名2;
意思是我创建一张表1,里面的字段,字段类型都与表名2是一样的,但是没有数据
2、
create table 表名1 as select name,address from 表名2;
表示我创建一张表1,里面有字段name与address,同时也会把对应的数据传到表1
查看表的信息:
desc 表名
desc formatted 表名:可以查看表的详细信息
外部表与内部表的区别:
创建外部表需要使用关键字:external (外部表删除后,在hdfs上不会跟着删除)
内部表删除后,在hdfs上会跟随删除
此时我创建一个外部表:
注意:
1、创建外部表的时候一般都重新定义路径
2、删除外部表的时候,数据不会被删除
create external table 表名(
~,
~
)
location ‘/user/psn2’
删除表:
drop table 表名;