将列添加到现有HIVE表会产生什么后果?

时间:2011-02-21 12:15:25

标签: hadoop hive schema

假设在开始使用HIVE后几百个Gigs我想添加一个列。 来自各种文章&我见过的页面,我无法理解其中的后果

  • 需要存储空间(双倍?)
  • 阻止(我还能在其他进程中读取表格吗?)
  • 时间(是快速还是与MysqL变化一样慢?)
  • 底层存储(我是否需要更改所有底层文件?如何使用RCFile完成?)

奖励任何能够在HIVE专栏中回答相同问题的人。

3 个答案:

答案 0 :(得分:12)

如果向hive表添加列,则仅更新基础Metastore。

  • 只要不添加数据,所需的存储空间就不会增加
  • 可以在其他进程访问表时进行更改
  • 更改非常快(仅更新底层Metastore)
  • 您不必更改基础文件。现有记录的值为新列

我希望这会有所帮助。

答案 1 :(得分:4)

ALTER TABLE命令仅修改METADATA。基础数据保持不变。但是,用户有责任确保任何更改都不会破坏数据的一致性。

对METADATA的任何更改都应用于Metastore(最常见的是MySQL),在这种情况下,响应时间是可比较的。

答案 2 :(得分:1)

更改定义只会修改文件的读取方式,而不会修改底层文件的内容。

如果您的文件是带有3列的制表符分隔文本,则可以创建一个表,该表引用具有new_table(行STRING)等方案的文件,这些方案将读取整行而不根据制表符解析出列。

当你添加一个列时,由于记录中没有更多的分隔符,它将默认为NULL,正如Helmut所提到的那样。