0

今天我们使用 Hive 作为我们的数据仓库,主要用于批量/批量数据处理 - Hive 分析查询/连接等 - ETL 管道

最近我们面临一个问题,我们试图将基于 hive 的 ETL 管道公开为服务。该问题与 hive 的固定表模式性质有关。我们有一种情况,表模式不固定,它可能会改变:可以添加新列(在模式中的任何位置不一定在末尾)、删除和重命名。

在 Hive 中,一旦创建了分区,我想它们就无法更改,即我们不能在旧分区中添加新列并仅用数据填充该列。我们必须使用新模式重新创建分区并在所有列中填充数据。但是,新分区可以有新的架构,并且会包含新列的数据(不确定是否可以在架构中的任何位置插入新列?)。尝试从旧分区(未修改)读取新列的值将返回 NULL。

我想知道我是否可以在这种情况下使用 HBase,它会解决我的上述问题吗?1. 在架构中的任何位置插入新列,删除列,重命名列 2. 在新列中回填数据,即旧数据(在旧分区中)仅在新列中填充数据,而不重新创建分区/重新填充数据其他列。

我知道 Hbase 是无模式(无模式)的,即每条记录/行可以有不同数量的列。不确定 HBase 是否有分区的概念?

4

1 回答 1

0
  1. 你是对的 HBase 是一个半无模式数据库(列族仍然固定)
  2. 您将能够创建新列
  3. 您将能够仅在新列中填充数据,而无需在其他列中重新创建分区/重新填充数据

  4. 不幸的是,HBase 不支持分区(用 Hive 术语来说)你可以看到这个讨论。这意味着如果分区日期不是行键的一部分,则每个查询都会进行全表扫描

  5. 重命名列根本不是微不足道的操作
  6. 在主要压缩间隔之间频繁更新现有记录将增加查询响应时间

我希望它会有所帮助。

于 2017-05-10T15:37:26.920 回答