我有一个配置单元表“videotracking\u playevent”,它使用以下分区格式(所有字符串):source/createyear/createmonth/createday。示例:source=home/createyear=2016/createmonth=9/createday=1
我正在尝试更新createmonth和createday的分区值,以便一致地使用两位数。示例:source=home/createyear=2016/createmonth=09/createday=01
我尝试了以下查询:
ALTER TABLE videotracking_playevent PARTITION (
source='home',
createyear='2015',
createmonth='11',
createday='1'
) RENAME TO PARTITION (
source='home',
createyear='2015',
createmonth='11',
createday='01'
);
但是,它从配置单元返回以下非描述性错误: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. null
我已经确认这个分区存在,并且我认为我使用了正确的语法。我的配置单元版本是配置单元1.1.0,你知道我做错了什么吗?
3条答案
按热度按时间pgccezyw1#
重命名用于更改分区列的值。其中一个用例是,您可以使用此语句规范化遗留分区列值以符合其类型。在这种情况下,即使hive.typecheck.on.insert属性设置为true(默认值),也不会为旧分区规范中的列值启用类型转换和规范化,这允许您以字符串形式指定旧分区规范中的任何旧数据
bug打开https://issues.apache.org/jira/browse/hive-10362
nhjlsmyf2#
重命名分区的旧版本配置单元出现问题。这对你的案子来说也是个问题。有关详细信息,请参见此链接。
如果您使用的是旧版本的配置单元,那么在执行rename partition命令之前需要设置以下两个属性。
现在通过设置这个属性来运行查询。
此问题已在配置单元的最新版本中修复。在我的例子中,配置单元版本是1.2.1,它可以工作,没有设置该属性。请看下面的例子。
创建分区表。
现在添加分区并检查新添加的分区。
使用重命名分区
RENAME TO PARTITION
命令并检查。希望对你有帮助。
fae0ux8s3#
您可以创建一个不带分区的表副本,然后更新表的列,然后用分区重新创建第一个
对我有用。