8

假设在开始使用 HIVE 后有几百个演出,我想添加一列。从我看到的各种文章和页面中,我无法理解后果

  • 需要存储空间(双倍?)
  • 阻塞(我仍然可以在其他进程中读取表格)吗?
  • 时间(它是快还是和 Mysql 变化一样慢?)
  • 底层存储(我需要更改所有底层文件吗?如何使用 RCFile 来完成?)

任何人都可以在 HIVE 列中的结构上回答相同的问题。

4

3 回答 3

12

如果将列添加到 hive 表,则仅更新底层元存储。

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

我希望这有帮助。

于 2011-02-23T06:45:34.723 回答
4

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

此外,对 METADATA 的任何更改都会应用于元存储(最典型的是 MySQL),在这种情况下,响应时间是可比较的。

于 2013-06-14T00:27:29.457 回答
1

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

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

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

于 2012-01-30T23:11:42.350 回答