【发布时间】:2016-12-06 17:41:48
【问题描述】:
我们计划将 Hive 中的动态分区功能用于我们的一个项目。我知道需要设置此参数才能使其正常工作:
hive.exec.dynamic.partition.mode=nonstrict
在我们的集群中,这设置为严格。我们正在努力对此进行更改,但同时我们计划将其作为一种解决方法:
- Create a fixed column that will always have the same hard-coded value and use this as the first static column for partitioning
- Use the columns for dynamic partitioning after this static column
这绝对消除了设置上述参数的问题。 Hive 只需要一个静态列,并且很乐意为其他列动态分区
我注意到,正如预期的那样,hive 使用静态分区创建了一个 HDFS 文件夹,然后在其下创建了用于动态分区的文件夹。像这样的:
/baseDir/staticColumn=staticValue/dynamicColumn=dynamicValue1
/baseDir/staticColumn=staticValue/dynamicColumn=dynamicValue2
因此,该解决方案将 HDFS 中的实际数据下推一级,这似乎不是问题/担忧
我的问题是,这个解决方案有什么缺点吗?从性能、可靠性的角度?
【问题讨论】:
-
忘记笨拙的解决方法。您可以在 HQL 脚本中设置该参数动态,例如
set hive.exec.dynamic.partition.mode=nonstrict ; insert into table X partition (PTKEY) select A, B, C, PTKEY from Z ;(除非您的管理员在配置文件中明确将参数定义为“最终”,但我不明白他/她为什么会这样做) -- cf。 cwiki.apache.org/confluence/display/Hive/Tutorial