1.Hive中的数据类型分为两类:基本类型和复杂类型
2.基本类型包含:tinyint,smallint,int,bigint,float,double,boolean,string,timestamp,binary
3.复杂类型:array,map和struct
hive是有多种表类型的,分四种,内部表、外部表、分区表、桶表
内部表也成受控表,表的默认数据存储在warehouse目录中,在加载数据过程中,实际上数据会被移动到warehouse目录中,在metastore中存储表的元数据信息,当我们一旦从hive删除一张表后,表中的数据和元数据将会同时被删除
建表语句中包含External的表也叫外部表,表的定义和数据生命周期互相不约束,数据只是表对hdfs上的某一个目录的引用而已,当删除表定义的时候,数据依然是存在的。仅删除表和数据之间引用关系。
create external table external_table( key string ) location '/data/external'

导入:
load data local inpath '/data/soft/hivedata/external_table.data' into table external_table;

此时表目录存在/data/external,而表数据存在 /data/external/external_table.data
![]()
当删除表时候, drop table external_table;表数据依旧存在

修改后:
备注:EXTERNAL必须大写,小写不生效:
分区可以理解为分类,通过分区把不同类型的数据放到不同目录。分区表的意义在于优化查询,查询时尽量利用分区字段,如果不使用分区字段,就会全表扫描,最典型的一个场景是把天作为分区字段,查询的时候指定天
创建表:
- create table partition_1(
- id int ,
- name string
- ) partitioned by (dt string)
- row format delimited
- fields terminated by '\t'
添加表分区数据
- load data local inpath '/data/soft/hivedata/partition_1.data'
- into table partition_1 partition(dt='2022-01-01');

手动添加分区:
alter table partition_1 add partition(dt ='2022-01-02');

创建表语句:
- create table partition_2(
- id int ,
- name string
- )partitioned by (year int ,school string)
- row format delimited
- fields terminated by '\t'

加载数据,其中数据文件只要有id和name这两个字段就可以,具体year和school两个区分字段在加载分区的时候指定的
load data local inpath '/data/soft/hivedata/partition_2.data' into table partition_2 partition (year='20220101',school='li');
如果数据已经上传了,如何把表绑定数据:
- alter table ex_par add partition(year=20220103,school='bao')
- location '/data/soft/hivedata/partition_2.data';

桶表是对数据进行哈希取值,然后放到不同文件中存储,物理上,每个桶就是表(或分区)里的一个文件
创建桶:
create table bucket_tb(id int) clustered by (id) into 4 buckets;
创建表并导入数据
- create table b_source(id int);
- load data local inpath '/data/soft/hivedata/b_source.data' into table b_source ;
往桶里导入数据
insert into table bucket_tb select id from b_source where id is not null;

