大数据技术应用7-4Hive外部表和分区表操作

本文详细介绍了Hive中外部表的创建与管理,包括如何将数据上传至HDFS,创建外部表以及删除操作。同时,讨论了分区表的概念,包括普通分区、动态分区、单分区和多分区的操作,如加载数据、新增、修改和删除分区。此外,还重点讲解了Hive的动态分区功能,包括开启动态分区、动态插入数据的步骤,以及动态分区的注意事项。
摘要由CSDN通过智能技术生成

Hive外部表操作

 

1.  准备结构化数据文件stu.txt

hadoop01/export/data/hivedata下创建文件stu.txt

2.  将文件stu.txt上传至HDFS

$hadoop fs -mkdir /stu

$hadoop fs -put stu.txt /stu

3.  创建外部表

 create external table stu_ext(sno int,sname string,sex string,sage int,sdept string) row format delimited fields terminated by ',' location '/stu';

1Hive创建内部表时,会将数据移动到数据库指向的路径;创建外部表时仅记录数据所在的路径,不会对数据的位置做任何改变

2、在删除表的时候,内部表的元数据数据会被一起删除,而外部表只删除元数据,不删除数据。

分区表是按照属性在文件夹层面给文件更好的管理,实际上就是对应一个HDFS文件系统上的独立文件夹,该文件夹下是该分区所有的数据文件。Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成数据集

普通分区动态分区

单分区和多分区

Hive分区表操作

1.  准备结构化数据文件user_p.txt

hadoop01/export/data/hivedata下创建文件stu.txt

2.  创建Hive分区表

hive> create table t_user_p(id int, name string)

partitioned by (country string)

row format delimited fields terminated by ',';

3.  加载数据

语法格式:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE]

INTO TABLE   table_name PARTITION (partcol1=val1,partcol2=val2……)

hive> load data local inpath '/export/data/hivedata/user_p.txt' into table t_user_p partition(country='USA');

4.  新增分区

hive> ALTER TABLE t_user_p  ADD PARTITION (country='China') location  '/user/hive/warehouse/itcast.db/t_user_p/country=China';

5.  修改分区

hive> ALTER TABLE t_user_p  PARTITION (country='China') RENAME TO PARTITION (country='Japan');

6.  删除分区

hive> ALTER TABLE t_user_p  DROP IF EXISTS PARTITION (country='Japan');

分区字段不能与已存在字段重复,且分区字段是一个虚拟的字段,它不存放任何数据,该数据来源于装载分区表时所指定的数据文件。

Hive动态分区

  在默认情况下,我们加载数据时,需要手动设置分区字段,并且针对一个分区就要写一个插入语句。如果源数据量很大时(例如,现有许多日志文件,要求按照日期作为分区字段,在插入数据的时候无法手动的添加分区),就可以利用Hive提供的动态分区,可以简化插入数据时的繁琐操作

Hive动态分区

1.  开启动态分区功能

hive> set hive.exec.dynamic.partition=true;

hive> set hive.exec.dynamic.partition.mode=nonstrict;

2.  实现动态分区

hive> insert overwrite table table_name

partition (partcol1[=val1], partcol2[=val2] ...)

select_statement FROM from_statement

Hive动态分区

1.  创建原始表

hive> create table dynamic_partition_table(day string,ip string) row format delimited fields terminated by ',';

2.  加载数据文件至原始表

hive> load data local inpath '/export/data/hivedata/dynamic_partition_table.txt' into table dynamic_partition_table;

3.  创建目标表

hive>create table d_p_t(ip string) partitioned by (month string,day string);

4.  动态插入

hive>insert overwrite table d_p_t partition(month,day) select ip,substr(day,1,7) as month,day from dynamic_partition_table;

INFO  : Number of reduce tasks is set to 0 since there's no reduce operator

5.  查看目标表的分区数据

hive> show partitions d_p_t;

动态分区不允许主分区采用动态列而副分区采用静态列,这样导致所有的主分区都创建副分区所定义的分区。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诺特兰德

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值