背景
在日常工作中,数据工程师常常需要将处理完毕的数据存到Hadoop的dfs上或者其他分布式数据库中,本文要介绍的是如何将数据输出到hive中,借此梳理下hive的相关操作(逐步更新板块)。
创建内(外)表
- 外部分区表
方案一:使用普通建表语句创建
CREATE EXTERNAL TABLE IF NOT EXISTS db.tb_name
(
field01 string,
field02 array<int>
)
PARTITIONED BY (dt int)
stored as parquet
LOCATION '/path/to_path';
方案二:利用现存表结构创建,新表具有相同的分区方式
CREATE EXTERNAL TABLE IF NOT EXISTS db.new_table LIKE db.exit_table LOCATION '/path/to_path';
向已创建的表导入数据
在导入数据时,除了常用的内部表,外部表也很受大家的青睐。因为外部表有自己的特性,可以将非Hive默认数仓路径下的数据轻松挂载到hive表,而且还可以避免在删除外部表时误删数据。
- 导入数据至外部分区表
alter table db.tb_name add if not exists partition(dt=20230510) location '/path/to_path/dt=20230510';
上述方式不会把数据复制到hive默认数仓路径,如需复制到默认数仓路径,需使用load方式
load data inpath '/path/to_path/dt=20230510' overwrite into table db.tb_name partition(dt=20230510);
修改表的属性
- 修改表的location
alter table db.table set location '/path/to_new_path';
- 内外表之间互转
alter table db.inter_table set TBLPROPERTIES ('EXTERNAL'='TRUE');