day56-Hive

day56-Hive

Hive

Hive数据类型

基本数据类型

Hive数据类型 Java数据类型
tinyint byte
smalint short
int int
bigint long
boolean boolean
float float
double double
string string
timestamp 时间类型
binary 字节数组

集合数据类型

数据类型 描述
struct 结构体,和c语言中的struct类似,都可以通过 点 符号访问元素内容
map map是一组键值对,使用数组表示法可以访问数据
array 数组是一组具有相同类型和名称的变量的集合。

实例

数据

数据的格式:,隔开了每个字段,_隔开了每个字段的多个值

songsong,bingbing_lili,xiao song:18_xiaoxiaosong:19,hui long guan_beijing
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing

基于上述的数据结构创建表

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

把数据上传到hdfs中

1. 通过hdfs上传
	hdfs fs -put person.txt /user/hive/warehouse/person
2. 通过hive上传(beeline)
	load data local inpath '/opt/module/hive-3.1.2/datas/person.txt' into table person;

类型转化

Hive的原子数据类型是可以进行隐式转换的,类似于Java的类型转换,例如某表达式使用Int类型,tinyint会自动转换为int类型,但是Hive不会进行反向转化,例如,某表达式使用tinyint类型,int不会自动转换为tinyint类型,他会返回错误,除非使用cast操作。

隐式类型转换

tinyint-->int-->bigint-->float-->double<--string
boolean类型不可以转换为任何其它的类型

可以使用cast操作显示进行数据类型转换

cast('1' as int) 转换成功返回被转换后的值, 转换失败返回值为null

DDL数据定义

建库语句

create database [if not exists] database_name  -- 指定库名
[comment database_comment]  -- 指定库的描述信息
[location hdfs_path]  -- 指定库在hdfs中的对应目录
[with dbproperties (property_name=property_value,...)] -- 指定库的属性信息

建库操作

create da tabase if not exists mydb
comment 'this is my first db'
location '/mydb' -- 不指定就会放到默认的工作目录(配置文件中配置的位置)
with dbproperties('dbname'='mydb','createtime'='2022-5-15');

元数据解释

在Hive中创建的库或者表,在HDFS中都有一个对应的目录,库或者表与目录的映射关系维护到mysql中的表中。
建库或者建表的时候,可以通过location指定库和表在hdfs的映射目录。如果指定,则使用指定的目录。
如果不指定,库默认映射的目录为/user/hive/warehouse/库名.db
	表默认映射的目录为 表所在的库映射的目录/表名
注意:hive不存储任何数据,数据都是存储在mysql中的。
mysql中的metastore
hdfs存储我们要分析的数据
hive的表要分析哪一部分数据,需要hive的表与hdfs的目录做一个映射关系,这个映射关系需要在mysql中维护,以及表的信息也在mysql中维护。

查询数据库

显示数据库

show databases;

过滤显示的数据库

show databases like 'db_hive*';

查看数据库详情

显示数据库信息

desc database db_hive;

显示数据库详细信息

desc database extended db_hive;

切换当前数据库

use db_hive;

修改数据库

用户可以使用alter database命令为某个数据库的dbproperties设置键-值对属性值,来描述这个数据库的属性信息。数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置。
  • 修改
alter database db_hive set
dbproperties('createtime'='20220930');

# 查看结果
desc database extended db_hive;

删除数据库

  • 删除空数据库
drop database db_hive;
  • 删除非空的数据库
drop database db_hive cascade;
  • hdfs
数据库被删除,在hdfs上对应的目录也会被删除,mysql的原数据也会被删除。

表的DDL

  • 建表语句
create [external] table [if not exists] table_name -- 指定表的名字
	-- external 表示外部表,不添加,则表示创建内部表(管理表)
	[(col_name data_type [comment col_comment],...)] -- 指定列名、列类型、列的描述信息
	[comment table_comment]	--  指定表的描述信息
	[partitioned by (col_name data_type [comment col_comment],...)] -- 指定分区列名 列类型 列描述信息(分区是f)
	[clustered by (col_name,col_name,...) -- 指定分桶列名,分桶是分数据
		[sorted by (col_name [asc|desc],...)] into num_buckets buckets] -- 指定排序列(几乎不使用0),分多少个桶
	[row format delimited fields terminated by 分隔符] -- 指定行分隔符
	
	row format delimited fields terminated by ',' -- 指定每行数据中每个元素的分隔符
    collection items terminated by '_'			  -- 指定集合的元素分隔符
    map keys terminated by ':'  				  -- 指定map的kv的分隔符
    lines terminated by '\n';					  -- 指定行分隔符	
	
	[stored as file_format] 	-- 指定表数据的存储格式(textfile,orc,parquet) 
	[location hdfs_path]        -- 指定表对应的hdfs的目录
	[tblproperties(property_name=property_value,...)] -- 指定表的属性信息
	[as select_statement]
  • 管理表
默认创建的表都是所谓的管理表,有时也被称为内部表。因为这种表,Hive会(或多或少地)控制着数据的生命周期。Hive默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir(例如:/user/hive/warehouse)所定义的目录的子目录下。当我们删除一个管理表时,Hive也会删除这个表中数据。管理表不适合和其他工具共享数据。
管理表(内部表)
	删除表时,会将表在HDFS中映射的目录和目录下的数据都删除
  • 外部表
外部表:create external table table_name();
	删除表时,只会删除mysql中元数据信息,不会删除表在HDFS中映射的目录和目录下的数据
  • 外部表与内部表的转换
desc formatted 表名; 查看表的详细信息
alter table 表名 set tblproperties('EXTERNAL'='FALSE'); // 取消外部表
alter table 表名 set tblproperties('EXTERNAL'='TRUE'); // 设置外部表

注意:大小写
posted @ 2022-05-16 22:13  黎白昼  阅读(33)  评论(0)    收藏  举报