hive中的动态分区

8wigbo56  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(353)

我在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壳以下

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亿时,这是一个好的实践吗?

kkbh8khc

kkbh8khc1#

动态分区是为那些将具有新分区值的表设计的。如果您的表将受到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'

在官方的hive教程中,您可以查看一个示例。
分区的最佳实践与存储的数据类型有关。例如:
不建议使用ID这样的唯一值(如果每一行都有不同的id值,这是一种不好的做法)
数据必须有足够的分散性,如果分区有几个不同的值(比如使用布尔字段或类似的值),这是一种不好的做法。

相关问题