目录

一、数据类型

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)

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)

只会删除元数据,不会删除表的数据

  • 创建外部表语句:
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)

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

/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)

同一个表目录下根据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;