Hive SQL:DDL建库 建表

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记录游戏中最受欢迎的选手信息,字段之间使用01作为分隔符合,要求在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
  • 字段之间分隔符01,建表时可省略row format,因为hive默认分割符号01
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

在这里插入图片描述

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>