Hive SQL:DDL建库 / 建表
🐘Hive SQL数据库 建库
数据库
-
在Hive中,默认的数据库叫做default,存储数据位置位于HDFS:/user/hive/warehouse
-
用户自己创建的数据库存储位 :/user/hive/warehouse/database_name.db
创建数据库
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)
-
COMMENT:数据库的注释说明语句
-
LOCATION:指定数据库在HDFS存储位置,默认/user/hive/warehouse/dbname.db
-
WITH DBPROPERTIES:用于指定一些数据库的属性配置
-
创建数据库db1
create database if not exists db1 comment "the first db" with dbproperties ('createdBy'='rkun18');
使用数据库
use db1
- 切换当前会话选择哪个数据库进行操作
删除数据库
-
默认行为RESTRICT,仅在数据库为空时才能删除
-
删除带表的数据可以使用CASCADE
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
🐝Hive SQL 数据表 建表
-
一个数据库通常包含一个或多个表。每个表由一个名字标识(例如“客户”或者“订单”)。
-
表包含带有数据的记录(行)。
-
语法框架
CREATE TABLE [IF NOT EXISTS] [db_name.]table_name (col_name data_type [COMMENT col_comment], ... ) [COMMENT table_comment] [ROW FORMAT DELIMITED …];
-
[]中语法代表可选
数据类型
- Hive数据类型表示表中列的字段类型
- 分为两类:原生 、复杂
- 常用字符串String和数字int
分隔符指定语法
[ROW FORMAT DELIMITED …]
-
用于指定字段之间相关的分隔符
-
LazySimpleSerDe是Hive默认。包含四种子语法,用于指定字段/元素/集合/map k-v之间换行的分隔符号
ROW FORMAT DElIMITED [FIELDS TERMINATED BY char] #字段 [COLLECTION ITEMS TERMINATED BY char]#集合 [MAP KEYS TERMINATED BY char]#map映射 [LINE TERMINATED BY char]#行数据
🦦案例
分隔符
文件archer.txt记录手游《王者荣耀》射手相关信息,包括生命,防御等属性,字段之间分隔符为制表符\t,要求在Hive中建表映射该文件。
archer.txt
1 后羿 5986 1784 396 336 remotely archer
2 马可波罗 5584 200 362 344 remotely archer
3 鲁班七号 5989 1756 400 323 remotely archer
4 李元芳 5725 1770 396 340 remotely archer
5 孙尚香 6014 1756 411 346 remotely archer
6 黄忠 5898 1784 403 319 remotely archer
7 狄仁杰 5710 1770 376 338 remotely archer
8 虞姬 5669 1770 407 329 remotely archer
9 成吉思汗 5799 1742 394 329 remotely archer
10 百里守约 5611 1784 410 329 remotely archer assassin
这里使用DataGrip编写
编写SQL语句:
use db1;
create table t_archer(
id int comment "ID",
name string comment "名称",
hp_max int comment "生命",
mp_max int comment "法力",
attack_max int comment "物攻",
defense_max int comment "防御",
attack_range string comment "范围",
role_main string comment "主位置",
role_assist string comment "副手"
)comment "射手信息"
row format delimited
fields terminated by "\t";
创建好之后将txt文件上传至,新建立的文件夹下
[root@node1 ~]# mkdir hivedata
[root@node1 ~]# cd hivedata/
[root@node1 hivedata]# pwd
/root/hivedata
[root@node1 hivedata]# ll
total 4
-rw-r--r-- 1 root root 480 Jun 13 13:23 archer.txt
[root@node1 hivedata]# hadoop fs -put archer.txt /user/hive/warehouse/db1.db/t_archer
文件team_ace_player.txt记录游戏中最受欢迎的选手信息,字段之间使用\001作为分隔符合,要求在Hive中建表并映射成功该文件。
team_ace_player.txt
1成都AG超玩会一诺
2重庆QGhappyHurt
3DYG久诚
4上海EDG.M浪浪
5武汉eStarProCat
6RNG.M暴风锐
7RW侠渡劫
8TES滔搏迷神
9杭州LGD大鹅伪装
10南京Hero久竞清融
- 字段:id,team_name,ace_player_name
- 字段之间分隔符\001,建表时可省略row format,因为hive默认分割符号\001
use db1;
create table t_team_ace_play(
id int,
team_name string,
ace_player_name string
);
建表成功后,将文件上传的对应表文件夹下
[root@node1 ~]# ls
hivedata nohup.out
[root@node1 ~]#
[root@node1 ~]# cd hivedata/
[root@node1 hivedata]# ls
archer.txt
[root@node1 hivedata]# ls
archer.txt team_ace_player.txt
[root@node1 hivedata]# hadoop fs -put team_ace_player.txt /user/hive/warehouse/db1.db/t_team_ace_play