配置单元中的动态分区

时间:2015-11-03 05:26:14

标签: hadoop hive partitioning

我在hive中创建了一个包含动态分区的表,如下所示

create table sample(uuid String,date String,Name String,EmailID String,Comments String,CompanyName String,country String,url String,keyword String,source String)  PARTITIONED BY (id String) Stored as parquet;

此外,我在hive shell中设置了以下内容

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions=100000000;
set hive.exec.max.dynamic.partitions.pernode=100000000;
set hive.exec.max.created.files = 100000000;

这是一个很好的做法,因为我为每个动态分区配置设置值为1亿,如上所示?

1 个答案:

答案 0 :(得分:0)

动态分区是针对那些具有新分区值的表而设计的。如果你的表会受INSERT子句影响,那么如果你没有动态分区,你必须执行另一个查询来创建新的,或者你必须知道之前的值:

FROM page_view_stg pvs
INSERT OVERWRITE TABLE page_view PARTITION(dt='2008-06-08', country='US')
   SELECT pvs.viewTime, pvs.userid, pvs.page_url, pvs.referrer_url, null, null, pvs.ip WHERE pvs.country = 'US'

official Hive tutorial中,您可以查看示例。

分区的最佳做法与存储的数据类型相关。例如:

  • 使用ID等唯一值并不值得推荐。 (如果每一行都有不同的id值,这是一种不好的做法)
  • 数据必须有足够的分散,如果分区的值很少(比如使用布尔字段或类似),这是一种不好的做法。