我在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亿时,这是一个好的实践吗?
1条答案
按热度按时间kkbh8khc1#
动态分区是为那些将具有新分区值的表设计的。如果您的表将受到insert子句的影响,则可以,如果您没有动态分区,则必须执行另一个查询来创建新的查询,或者您必须先知道这些查询的值:
在官方的hive教程中,您可以查看一个示例。
分区的最佳实践与存储的数据类型有关。例如:
不建议使用ID这样的唯一值(如果每一行都有不同的id值,这是一种不好的做法)
数据必须有足够的分散性,如果分区有几个不同的值(比如使用布尔字段或类似的值),这是一种不好的做法。