三四, Hive数据类型和数据定义语言(DDL)

三, Hive数据类型

1. 基本数据类型

在这里插入图片描述

对于Hive的String类型, 其相当于数据库的Varchar类型, Hive 的stirng是一个可变的字符串, 不过它不能声明其中最多能存储多少少个字符, 理论上它可以存储2GB的字符数.

2. 集合数据类型

在这里插入图片描述

2.1 案例实操

2.1.1 待创建表的格式

在这里插入图片描述

  • 解释: 这是Hive查询表的大致输出
///输出的格式
{
	"name": "songsong",
	"friends": ["bingbing" , "lili"] , //列表 Array,--相当于数组
	
	"children": { //键值 Map,K-V
		"xiao song": 18 ,
		"xiaoxiao song": 19
	}
	
	"address": {	//结构 Struct, 相当于JavaBean
		"street": "hui long guan",
		"city": "beijing",
		"years":2000
	}
}

2.1.2 在hive中创建表, 并添加字段名和字段类型如下:

create table dataType(
	name string,
	friends array<string>,
	children map<string,int>,
	address struct<street : string, city : string, years : int>
	)
row format delimited fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';

对上面分隔符的解释:

  1. 逗号 , 不同列名下的元素用逗号隔开(比如name和age的数据写成 sb,18, map元素和struct之间写成 map的元素 , struct的元素)
  2. 下滑 _ (包括map集合, struct结构体, array 数组)内部的多个元素之间用下划线_隔开(比如Map(String, int)可写为 xiaoming:18_xiaosan:33)
  3. 冒号 : map的key和Value之间用: 分割
  4. 换行 \n 每一行数据用回车换行分割

2.1.3 在文档中按照步骤2中各个字符之间的分隔符规定输入数据, 并上传到HDFS.

songsong, bingbing_lili, xiao song:18_xiaoxiao song:19, hui long guan_beijing_2000
lili,songsong_xiaoer,lowbi:28_shabi:29,erqiqu_zhengzhou_2500

在这里插入图片描述

2.1.4 在Hive中查看这张表:

在这里插入图片描述

2.1.5 注意: 筛选查询数据的几个方法

  1. 对于hive中的数组(array), 可以使用数组的列名访问
  2. 对于hive中的集合(map),使用集合列名访问
  3. 对于hive中的结构体(struct), 使用结构体的列名.结构体变量
  • 举个栗子:
    全部数据:
    在这里插入图片描述
  1. 对数组的访问:
    在这里插入图片描述

  2. 对Map集合的访问:
    在这里插入图片描述

  3. 对结构体Struct的访问:
    在这里插入图片描述

3. 类型转换

在这里插入图片描述
在这里插入图片描述

四, DDL-数据库定义(会用即可)

4.1 数据库管理

4.1.0 创建数据库

在这里插入图片描述

4.1.1 查询数据库

  1. 显示数据库 (show databases;)
  2. 过滤显示的数据库 (show databases like ‘xx’ 可使用通配符*, 另外切记别忘了引号’’);

4.1.2 查看数据库信息

  1. 显示数据库信息(desc database xx);
    在这里插入图片描述

  2. 显示数据库详细信息(desc database extended xx);

  3. 切换/使用数据库 (use xx);

4.1.3 修改数据库

  1. 用户可以使用(alter databases xx)命令为某个数据库的dbproperties设置键值对属性来描述这个数据库的属性信息, 这个设置的值可以在(desc databse extended xx)中体现;

在这里插入图片描述

4.1.4 删除数据库

  1. 删除存在/不存在数据库(drop database [if exists] xx);

在这里插入图片描述

  1. 删除空和非空(drop databse xx cascade)数据库;
    在这里插入图片描述

4.2 表管理

4.2.0 建表语法

在这里插入图片描述

4.2.1 表的创建

4.2.1.1 内部表(管理表)

[理论]

  • 默认创建的表都是所谓的管理表(或称为内部表), 因为这种表, Hive会(或多或少地)控制着数据的生命周期. Hive默认情况下会将这些表的数据存储在由配置项 hive.metastore.warehouse.dir(如, /user/hive/warehouse)所定义的目录的子目录下.
  • 当我们删除一个管理表时, Hive也会删除这个表中的数据. 管理表不适合和其他工具共享数据.

[案例实操]

  1. 准备数据文本 internal.text, 内容如下:
1001	ss1
1002	ss2
1003	ss3
1004	ss4
1005	ss5
1006	ss6
1007	ss7
1008	ss8
1009	ss9
1010	ss10
1011	ss11
1012	ss12
1013	ss13
1014	ss14
1015	ss15
1016	ss16
  1. 在hive中创建student表, 为方便起见, 我们可以把sql写在文件中, 使用 hive -f 文件名 执行创建命令.

在sql中. 默认创建内部表,
而且表中列之间用制表符隔开也要特别指出哦! 不然数据无法正常查询(row FORMAT delimited fields terminated BY ‘\t’)

CREATE TABLE IF NOT EXISTS student(

	id INT,
	name string
)
row FORMAT delimited fields terminated BY '\t'
stored AS textfile
location '/user/hive/warehouse/student';
  1. 把数据文本 internal.txt 传送到 HDFS的 建表 location 路径下,
    在这里插入图片描述

  2. 查询表中的数据;
    在这里插入图片描述

  3. 查看表的信息;

在这里插入图片描述

4.2.1.2 外部表

[理论]

  • 对于外部表, Hive不认为它完全拥有外部表的数据, 所以删除外部表的时候不会删除表的数据, 不过描述表的元数据信息会被删除掉.

[管理表和外部表的使用场景]

  • 每天将收集到的网站日志定期流入 HDFS 文本文件。在外部表(与其他程序一同使用的原始日志表)的基础上 做大量的统计分析,用到的内部表(单独使用的中间表、结果表使用内部表存储),数据通过 SELECT+INSERT 进入内部表。

[案例实操]

CREATE external TABLE IF NOT EXISTS student(

	id INT,
	name string
)
row FORMAT delimited fields terminated BY '\t'
stored AS textfile
location '/user/hive/warehouse/student';

4.2.1.2 管理表(内部表)与外部表的相互转换

alter table student set tbleproperties(‘EXTERNAL’=‘TRUE/FALSE’);

在这里插入图片描述

4.2.2 表的修改

4.2.2.1 重命名表(alter table xx rename to xx)

4.2.2.2 增加修改和删除表分区 (cp7 章节)

4.2.2.3 增加/修改/替换列信息

在这里插入图片描述
在这里插入图片描述
[案例实操]

在这里插入图片描述

4.2.3 表的删除(drop table xx)

Guess you like

Origin blog.csdn.net/nmsLLCSDN/article/details/119325138