千家信息网

Hive分区表常用语法有哪些

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章给大家分享的是有关Hive分区表常用语法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言:如果对分区表了如指掌,那么非分区表的语法就简单多了,只需将 PAR
千家信息网最后更新 2025年02月01日Hive分区表常用语法有哪些

这篇文章给大家分享的是有关Hive分区表常用语法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

前言:

如果对分区表了如指掌,那么非分区表的语法就简单多了,只需将 PARTITION 相关字段去掉就可以了。

1. 创建hive分区表

//不指定LOCATION

CREATE EXTERNAL TABLE

IF NOT EXISTS hive_partition_01(

ROWKEY STRING,

YEAR INT,

MONTH INT,

DAY INT,

HOUR INT,

MINUTE INT)

PARTITIONED BY (AGE INT)

ROW FORMAT DELIMITED FIELDS

TERMINATED BY ',' STORED AS TEXTFILE;

注:不指定LOCATION,默认为/user/hive/warehouse/*.db/table_name

//指定LOCATION

CREATE EXTERNAL TABLE

IF NOT EXISTS hive_partition_02(

ROWKEY STRING,

YEAR INT,

MONTH INT,

DAY INT,

HOUR INT,

MINUTE INT)

PARTITIONED BY (AGE INT)

ROW FORMAT DELIMITED FIELDS

TERMINATED BY ','

STORED AS TEXTFILE

LOCATION 'hdfs://master:8020/user/hive/warehouse/hive_hbase.db/hive_partition_01' ;

注:创建指定数据路径的外部分区表要添加分区后才能查到数据,可在hive命令行执行修复命令: msck repair table tablename。

2. 创建分区

ALTER TABLE hive_partition_01 ADD PARTITION(AGE= 1998);

注:创建分区后 HDFS 增加目录 age=1998

3. 删除分区

ALTER TABLE hive_partition_01 DROP IF EXISTS PARTITION(age =1998);

注:外部表删除分区后HDFS分区数据不会被删除

4. 向HIVE表加载数据(四种方式)

4.1 从HDFS上导入数据到Hive表

//加载某个目录下所有数据,只适合非分区表

LOAD DATA INPATH '/emp.txt' OVERWRITE INTO TABLE hive_01;

//INTO 追加写

LOAD DATA INPATH '/emp.txt' INTO TABLE hive_partition_01 PARTITION(AGE=1998);

注:从HDFS加载数据,加载后emp.txt文件消失,属于copy操作

//OVERWRITE INTO 覆盖写

LOAD DATA INPATH '/emp.txt' OVERWRITE INTO TABLE hive_partition_01 PARTITION(AGE=1998);

LOAD DATA INPATH '/emp.txt' [OVERWRITE] INTO TABLE hive_partition_01 PARTITION(AGE=1999);

注:执行该语句若分区不存在会自动创建

4.2 从本地文件系统中导入数据到Hive表

// INTO 追加写

LOAD DATA LOCAL INPATH '/home/emp.txt' INTO TABLE hive_partition_01 PARTITION(AGE=1999);

// OVERWRITE INTO 覆盖写

LOAD DATA LOCAL INPATH '/home/emp.txt' OVERWRITE INTO TABLE hive_partition_01 PARTITION(AGE=1999);

4.3 从别的表中查询数据并导入到Hive表中

// INTO 追加写

insert INTO table hive_partition_01 partition (AGE=1999) select rowkey, year, month ,day , hour , minute from hive_partition_02;

注:hive_partition_02 表 select 的字段必须与 hive_partition_01 表对应,此条语句会执行MapReduce任务

//OVERWRITE 覆盖写

insert OVERWRITE table hive_partition_01 partition (AGE=1999) select rowkey, year, month ,day , hour , minute from hive_partition_02;

注:HDFS分区目录下的文件都会被覆盖写

4.4 创建表时从别的表查询数据到所创建的表

create table hive_partition_03 as select rowkey, year, month from hive_partition_01;

注:此条语句会执行MapReduce任务,可select部分字段

4.5 支持多表插入

from hive_partition_01

> insert into table hive_partition_02

> partition(age=1998)

> select rowkey, year, month ,day , hour , minute

> insert into table hive_partition_03

> select rowkey, year, month;

注:向HDFS目录相同路径下上传相同文件,文件名会添加copy字样。如下:

/user/hive/warehouse/hive_hbase.db/hive_partition_01/age=1999/emp.txt

/user/hive/warehouse/hive_hbase.db/hive_partition_01/age=1999/emp_copy_1.txt

注:hive 字段不区分大小写

感谢各位的阅读!关于"Hive分区表常用语法有哪些"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

0