当前位置: 首页 > news >正文

4.2 Hive SQL

Hive SQL - DDL

  • 一、Hive SQL语言:DDL建库、建表
    • 1、 Hive SQL之数据库与建库
      • SQL中DDL语法的作用
      • Hive中DDL语法的使用
      • 数据库database
      • create database
      • use database
      • drop database
    • 2、Hive SQL之表与建表
      • 表Table
      • 建表语法树(基础)
      • 注意事项
      • (1)数据类型
      • (2)分隔符指定语法
      • Hive默认分隔符
      • 练习一、数据类型、分隔符练习
      • 练习二、默认分隔符使用
  • 二、Hive Show语法
    • 1、show语法功能
    • 2、常用show语句
    • 参考

一、Hive SQL语言:DDL建库、建表

1、 Hive SQL之数据库与建库

Hive数据模型总览
在这里插入图片描述

SQL中DDL语法的作用

  • 数据定义语言 (Data Definition Language, DDL),是SQL语言集中对数据库内部的对象结构进行创建,删除,修改等的操作语言,这些数据库对象包括database、table等。
  • DDL核心语法由CREATE、ALTER与DROP三个所组成。DDL并不涉及表内部数据的操作。

Hive中DDL语法的使用

  • Hive SQL(HQL)与标准SQL的语法大同小异,基本相通;
  • 基于Hive的设计、使用特点,HQL中create语法(尤其create table)将是学习掌握Hive DDL语法的重中之重。
  • 建表是否成功直接影响数据文件是否映射成功,进而影响后续是否可以基于SQL分析数据。通俗点说,没有表,表没有数据,你用Hive分析什么呢?

数据库database

  • 在Hive中,默认的数据库叫做default,存储数据位置位于HDFS的/user/hive/warehouse下。
  • 用户自己创建的数据库存储位置是/user/hive/warehouse/database_name.db下。

create database

  • create database用于创建新的数据库
    COMMENT:数据库的注释说明语句
    LOCATION:指定数据库在HDFS存储位置,默认/user/hive/warehouse/dbname.db
    WITH DBPROPERTIES:用于指定一些数据库的属性配置
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
  • 例子:创建数据库itcast
    注意:如果需要使用location指定路径的时候,最好指向的是一个新创建的空文件夹。
create database if not exists itcast
comment "this is my first db"
with dbproperties ('createdBy'='Allen');

在这里插入图片描述

use database

  • 选择特定的数据库
    切换当前会话使用哪一个数据库进行操作
    在这里插入图片描述

drop database

  • 删除数据库
    默认行为是RESTRICT,这意味着仅在数据库为空时才删除它。
    要删除带有表的数据库(不为空的数据库),我们可以使用CASCADE
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];

在这里插入图片描述

2、Hive SQL之表与建表

Hive数据模型总览
在这里插入图片描述

表Table

  • 一个数据库通常包含一个或多个表。每个表由一个名字标识(例如“客户”或者“订单”)。
  • 表包含带有数据的记录(行)。

在这里插入图片描述

建表语法树(基础)

CREATE TABLE [IF NOT EXISTS] [db_name.]table_name
(col_name data_type [COMMENT col_comment], ... )
[COMMENT table_comment]
[ROW FORMAT DELIMITED …];

注意事项

  • 蓝色字体是建表语法的关键字,用于指定某些功能。
  • [ ]中括号的语法表示可选。
  • 建表语句中的语法顺序要和语法树中顺序保持一致。
  • 最低限度必须包括的语法为:
CREATE TABLE [IF NOT EXISTS] [db_name.]table_name
(col_name data_type [COMMENT col_comment], ... )
[COMMENT table_comment]
[ROW FORMAT DELIMITED …];
CREATE TABLE table_name (col_name data_type);

(1)数据类型

  • Hive数据类型指的是表中列的字段类型;
  • 整体分为两类:原生数据类型(primitive data type)和复杂数据类型(complex data type)。
  • 最常用的数据类型是字符串String和数字类型Int。
    在这里插入图片描述

(2)分隔符指定语法

  • ROW FORMAT DELIMITED语法用于指定字段之间等相关的分隔符,这样Hive才能正确的读取解析数据。
  • 或者说只有分隔符指定正确,解析数据成功,我们才能在表中看到数据
CREATE TABLE [IF NOT EXISTS] [db_name.]table_name
[(col_name data_type [COMMENT col_comment], ... ]
[COMMENT table_comment]
[ROW FORMAT DELIMITED …];
  • LazySimpleSerDe是Hive默认的,包含4种子语法,分别用于指定字段之间、集合元素之间、map映射 kv之间、换行的分隔符号。
  • 在建表的时候可以根据数据的特点灵活搭配使用。
    在这里插入图片描述

Hive默认分隔符

  • Hive建表时如果没有row format语法指定分隔符,则采用默认分隔符;
  • 默认的分割符是’\001’,是一种特殊的字符,使用的是ASCII编码的值,键盘是打不出来的。
    在这里插入图片描述
  • 在vim编辑器中,连续按下Ctrl+v/Ctrl+a即可输入’\001’ ,显示^A
    在这里插入图片描述
  • 在一些文本编辑器中将以SOH的形式显示:
    在这里插入图片描述

练习一、数据类型、分隔符练习

文件archer.txt中记录了手游《王者荣耀》射手的相关信息,包括生命、物防、物攻等属性信息,其中
字段之间分隔符为制表符\t,要求在Hive中建表映射成功该文件。

(1/3)数据文件

  • 字段含义:id、name(英雄名称)、hp_max(最大生命)、mp_max(最大法力)、attack_max(最高物攻)、defense_max(最大物防)、attack_range(攻击范围)、role_main(主要定位)、role_assist(次要定位)。
  • 分析一下:字段都是基本类型,字段的顺序需要注意一下。
  • 字段之间的分隔符是制表符,需要使用row format语法进行指定
    在这里插入图片描述
    (2/3)建表语句
--创建数据库并切换使用
create database if not exists itheima;
use itheima;
--ddl create table
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";

(2/3)建表语句

  • 建表成功之后,在Hive的默认存储路径下就生成了表对应的文件夹;
  • 把archer.txt文件上传到对应的表文件夹下。
#在node机器上进行操作
cd ~
mkdir hivedata
cd hivedata/
#把文件从课程资料中首先上传到node1 linux系统上
#执行命令把文件上传到HDFS表所对应的目录下
hadoop fs -put archer.txt /user/hive/warehouse/itheima.db/t_archer

在这里插入图片描述

(3/3)结果验证

  • 执行查询操作,可以看出数据已经映射成功。
  • 核心语法:row format delimited fields terminated by 指定字段之间的分隔符。
    在这里插入图片描述

练习二、默认分隔符使用

文件team_ace_player.txt中记录了手游《王者荣耀》主要战队内最受欢迎的王牌选手信息,字段之间
使用的是\001作为分隔符,要求在Hive中建表映射成功该文件。

(1/3)数据文件

  • 字段:id、team_name(战队名称)、ace_player_name(王牌选手名字)
  • 分析一下:数据都是原生数据类型,且字段之间分隔符是\001,因此在建表的时候可以省去row format语句,因为hive默认的分隔符就是\001。
    在这里插入图片描述
    (2/3)建表语句
create table t_team_ace_player (
id int,
team_name string,
ace_player_name string
);
  • 表成功后,把team_ace_player.txt文件上传到对应的表文件夹下。
#在node机器上进行操作
cd ~
cd hivedata/
#把文件从课程资料中首先上传到node1 linux系统上
#执行命令把文件上传到HDFS表所对应的目录下
hadoop fs -put team_ace_player.txt
/user/hive/warehouse/itheima.db/t_team_ace_player

(3/3)结果验证

  • 执行查询操作,可以看出数据已经映射成功。
  • 想一想:字段以\001分隔建表时很方便,那么采集、清洗数据时对数据格式追求有什么启发?你青睐于什么分隔符?

在这里插入图片描述

二、Hive Show语法

1、show语法功能

  • Show相关的语句可以帮助用户查询相关信息。
  • 比如我们最常使用的查询当前数据库下有哪些表 show tables.

2、常用show语句

--1、显示所有数据库 SCHEMAS和DATABASES的用法 功能一样
show databases;
show schemas;
--2、显示当前数据库所有表
show tables;
SHOW TABLES [IN database_name]; --指定某个数据库
--3、查询显示一张表的元数据信息
desc formatted t_team_ace_player;

参考

资料来源于《黑马程序员-大数据Hadoop入门》

相关文章:

  • C++ 【多态】
  • 一台服务器最大能支持多少条TCP连接
  • Linux中目录的概述以及 查看 切换 创建和删除目录
  • 剑指 Offer 03. 数组中重复的数字
  • 5_会话管理实现登录功能
  • 【STL】STL入门(9)
  • 超市积分管理系统(Java+Web+MySQL)
  • 超级简单的机器学习入门
  • 基于SSM跨境电商网站的设计与实现/海外购物平台的设计
  • Flutter——常用布局
  • RBF神经网络python实践学习(BP算法)
  • _Linux 动态库
  • spring5(一):概述
  • C++基础知识梳理<2>(引用、内联函数、auto关键字) [入门级】
  • Halcon图像分割总结
  • 学习笔记-WinRM
  • Java内存模型与volatile
  • LIO-SAM中的mapOptmization
  • Pandas数据处理可视化
  • NA of optical fiber(光纤的数值孔径)