今天,我们使用hive作为数据仓库,主要用于批处理/批量数据处理—hive分析查询/连接等—etl管道
最近,我们面临着一个问题,我们正试图将基于配置单元的etl管道作为服务公开。这个问题与配置单元的固定表模式性质有关。我们有一种情况,表模式不是固定的,它可能会改变例如:可以添加新列(在模式中的任何位置,不一定在末尾)、删除和重命名。
在hive中,一旦创建了分区,我想它们就不能更改了,即我们不能在旧分区中添加新列,而只能用数据填充该列。我们必须用新的模式重新创建分区,并在所有列中填充数据。但是,新分区可以有新的架构,并且将包含新列的数据(不确定是否可以在架构中的任何位置插入新列?)。尝试从旧分区(未修改)读取新列的值将返回null。
我想知道我是否可以在这个场景中使用hbase,它能解决我的上述问题吗?1在架构中的任意位置插入新列,删除列,重命名列2。在新列中回填数据,即对于旧数据(在旧分区中),只在新列中填充数据,而不重新创建分区/在其他列中重新填充数据。
我知道hbase没有模式(无模式),即每个记录/行可以有不同的列数。不确定hbase是否有分区的概念?
1条答案
按热度按时间klsxnrf11#
您是对的hbase是一个半无模式的数据库(列族仍然是固定的)
您将能够创建新列
您将能够只在新列中填充数据,而无需在其他列中重新创建分区/重新填充数据
但是
不幸的是,hbase不支持分区(用配置单元的术语)您可以看到下面的讨论。这意味着,如果分区日期不是行键的一部分,则每个查询将执行一次完整的表扫描
重命名列根本不是一个简单的操作
在主要压缩间隔之间频繁更新现有记录将增加查询响应时间
我希望这是有帮助的。