Hive篇 -- 02数据类型&数据存储

目录

一、数据类型

1.基本数据类型

2.集合数据类型

二、数据存储

1.DB(Database)

2.内部表(Table)

3.外部表(External Table)

4.分区(Partition)

5.分桶(Bucket)

6.Hive视图


一、数据类型

1.基本数据类型

  • 数值型:
    • TINYINT、SMALLINT、INT、BIGINT
    • FLOAT、DOUBLE
  • 字符型:STRING、VARCHAR、CHAR
  • 时间戳:TIMESTAMP
  • 布尔型:BOOLEAN
  • 二进制类型:BINARY

2.集合数据类型

  • MAP:是一种(key-value)键值对类型 

map(key1, value1, key2, value2,…) 比如:map('math',90,'english',92)

  • ARRAY:是一种数组类型,其中存放相同类型的数据

array(val1, val2,…) 比如:array(90,92)

  • STRUCT:是一种集合类型

struct(val1, val2, val3,…) 比如 struct(1,'genius') 

二、数据存储

1.DB(Database)

        在HDFS中表现为hive.metastore.warehouse.dir目录下的一个文件夹

2.内部表(Table)

        在HDFS中表现DB目录下一个文件夹。Hive的每个表都有自己的存储目录,除外部表,所有表数据都存放配置在hive-site.xml文件的${hive.metastore.warehouse.dir}/table_name目录下

  • 创建内部表语句:
CREATE TABLE IF NOT EXISTS student_scores
(  user_no STRING COMMENT '学号'
  ,name STRING COMMENT '姓名'
  ,subject STRING COMMENT '科目'
  ,score STRING COMMENT '分数'
) COMMONT '学生成绩表'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORE AS TEXTFILE
;

3.外部表(External Table)

        与内部表类似,但数据存放位置可以指定任意路径。外部表指向已经存在Hadoop的HDFS上的数据,在删除表时只会删除元数据,不会删除表的数据

  • 创建外部表语句:
CREATE EXTERNAL TABLE IF NOT EXISTS student_scores
(  user_no STRING COMMENT '学号'
  ,name STRING COMMENT '姓名'
  ,subject STRING COMMENT '科目'
  ,score STRING COMMENT '分数'
) COMMONT '学生成绩表'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORE AS SEQUENCEFILE
LOCATION '/usr/test/data/score.txt'
;

4.分区(Partition)

        在HDFS中表现为Table目录下一子目录每一个分区对应表下一个目录,所有的分区数据都存储在对应的目录中。

        比如一个表包含province、city、dt三个分区,其中province = Beijing,city = Beijing,dt = 2023-04-15,那么对应的HDFS目录为/datawarehouse/table/province=Beijing/city=Beijing/dt=2023-04-15

        注意:分区中定义的变量名和字段名不可以相同

  • 建表创建分区语句:
CREATE TABLE IF NOT EXISTS student_scores
(  user_no STRING COMMENT '学号'
  ,name STRING COMMENT '姓名'
  ,subject STRING COMMENT '科目'
  ,score STRING COMMENT '分数'
) COMMONT '学生成绩表'
PARTITIONED BY (
    province STRING COMMENT '省份'
   ,city STRING COMMENT '城市'
   ,dt STRING COMMENT '日期')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORE AS TEXTFILE
;

5.分桶(Bucket)

        在HDFS中表现为同一个表目录下根据Hash散列之后的多个文件,对指定列进行Hash计算,根据Hash值进行切分,将数据按照字段划分到多个文件中去

  • 建表创建分桶语句:
CREATE TABLE IF NOT EXISTS student_scores
(  user_no STRING COMMENT '学号'
  ,name STRING COMMENT '姓名'
  ,subject STRING COMMENT '科目'
  ,score STRING COMMENT '分数'
) COMMONT '学生成绩表'
PARTITIONED BY (
    province STRING COMMENT '省份'
   ,city STRING COMMENT '城市'
   ,dt STRING COMMENT '日期')
CLUSTERED BY(user_no) SORTED BY(score) INTO 32 BUCKETS 
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORE AS TEXTFILE

;

6.Hive视图

        Hive视图并不存储数据或者实例化,一旦创建确定Schema

        底层表后续的更改并不会影响视图的Schema,但是如果将底表删除,视图查询时会fail

  • 创建视图语句:
CREATE VIEW temp_student_score AS
SELECT name
      ,subject 
      ,score
  FROM student_scores;
  • 更改视图属性语句:
ALTER VIEW temp_student_scores
SET TBLPROPERTIES ('comment' = 'This is a view');
  • 重新定义视图语句:
ALTER VIEW temp_student_score AS
SELECT * from student_score_2 ;
  • 查询CREATE语句创建的视图:

                SHOW CREATE TABLE 语句

                DESC FORMATTED TABLE 语句

  • 删除视图语句:
DROP VIEW temp_student_score;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值