Hive 使用配置单元向现有ORC文件添加新字段

Hive 使用配置单元向现有ORC文件添加新字段,hive,orc,Hive,Orc,欣赏基于以下场景的任何输入- 按原样处理-我们从源系统接收CSV文件。我们使用配置单元管理这些CSV文件,并将它们加载到s3中,转换为ORC文件格式。我们已经在AWS s3中积累了两年的历史数据,这些数据是以ORC文件格式组织的,由C5列之一划分 e、 g.当前文件中的列(csv和orc)C1、C2、C3、C4、C5 待处理-要求源系统在csv文件末尾添加新列。 新文件C1、C2、C3、C4、C5、C6、C7中的列 接下来需要填充字段C6和C7 在配置单元中,我们目前正在基于分区列C5执行和插入

欣赏基于以下场景的任何输入-

按原样处理-我们从源系统接收CSV文件。我们使用配置单元管理这些CSV文件,并将它们加载到s3中,转换为ORC文件格式。我们已经在AWS s3中积累了两年的历史数据,这些数据是以ORC文件格式组织的,由C5列之一划分

e、 g.当前文件中的列(csv和orc)C1、C2、C3、C4、C5

待处理-要求源系统在csv文件末尾添加新列。 新文件C1、C2、C3、C4、C5、C6、C7中的列 接下来需要填充字段C6和C7

在配置单元中,我们目前正在基于分区列C5执行和插入公开写入


这里的问题是,我们能否将新文件(具有附加字段C6和C7)堆叠到现有的ORC文件上?如果是,建议的步骤是什么。我们是否需要重写历史文件并为C6和C7创建空白字段,因为我们永远不会获得这些字段的历史数据?或者它会自动显示NULL?

默认情况下,ALTER TABLE不会更改现有分区的列列表——配置单元将检测差异并显示缺少的带有NULL的列。但未来的分区将在其ORC数据文件中包含这些列。(除了在Hive的旧版本中有奇怪的bug,约2015年)但是。。。分区键不是一列;它总是在结尾显示,在适当的颜色之后。因此,您的表当前显示的是
C1、C2、C3、C4、Ck
,再添加两列后,它将显示
…、C4、C5、Ck
。请记住,分区键不是数据,而是元数据……您好@SamsonScharfrichter,我正计划删除配置单元外部表,并使用附加列创建新表。对于新文件,新字段位于文件末尾。对于旧文件,新字段将不存在。由于分区仍然是相同的,我相信,新的外部表应该可以很好地工作,即显示新文件的值,而旧文件的值将显示为null。在这种情况下,任何东西都不应损坏。这种理解正确吗?任何类似的经验和建议都将不胜感激。感谢@SamsonScharfrichter对列和键的输入。如果我正确地阅读了您的评论,我可以继续将新文件堆叠在当前文件之上,只要C1到C4的位置在新文件中保持不变,并且之后定义了新字段。由于分区键仍然是相同的字段-Ck,它将继续无缝地出现在末尾。运行测试--创建一个包含2个分区和每个分区中几个ORC文件的虚拟表,添加列,创建一个新分区,插入到新分区,运行一些测试和查询。2015年,我看到它在使用矢量化选择时崩溃并烧毁;该错误已修复,但新的错误可能随时出现:-/