Spark on Hive动态分区表的应用

分区表

静态分区与动态分区的主要区别在于静态分区是手动指定,而动态分区是通过数据来进行判断。详细来说,静态分区的列实在编译时期,通过用户传递来决定的;动态分区只有在SQL执行时才能决定。

动态分区

启用hive动态分区,只需要在hive会话中设置两个参数:

set hive.exec.dynamic.partition=true;  

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

插入数据
动态分区的使用方法很简单,假设我想向stat_date='20110728’这个分区下面插入数据,至于province插入到哪个子分区下面让数据库自己来判断。那可以这样写: 

insert overwrite table partition_test partition(stat_date='20110728',province)
select 
	member_id
	,name
	,province
from 
	partition_test_input 
where 
	stat_date='20110728';

运行Spark的时候,同时跑多个任务对同一张表(parquet格式),同时写多个Hive分区,需要加一下参数set("spark.sql.hive.convertMetastoreParquet","false"); 这样的话,所使用的spark临时目录就是独立(静态分区默认共用一个临时目录),不会冲突。 如果是orc格式,里面的关键字改成orc就行。

你可能感兴趣的:(大数据,大数据)