我有一些配置单元表,我每小时使用sqoop增量导入从rdbms引入并暂存它们。我正在连接这些表并创建新的维度表。每当我将rdbms中的新行引入hive staging表时,我都必须刷新维度表。如果没有新行,则不应刷新dim表。我使用的配置单元版本没有acid功能。需要一些关于如何在Hive中实现这一点的建议。
c9qzyr3d1#
您可以像任何其他数据库一样,在现有配置单元表中插入新数据。hive还支持where not exists子句。
INSERT INTO TABLE MyDim SELECT Id, Blah1, Blah2 FROM MySource s WHERE NOT EXISTS (SELECT 1 FROM MyDim z WHERE z.Id =s.Id)
但有一个问题:每个插入都将创建一个新的hdfs文件,即使没有涉及任何记录。过多的碎片会随着时间的推移降低性能。每周进行一次“压缩”作业会很有帮助(例如,重命名碎片表、重新创建表、从重命名的表插入覆盖、删除重命名的表)
1条答案
按热度按时间c9qzyr3d1#
您可以像任何其他数据库一样,在现有配置单元表中插入新数据。hive还支持where not exists子句。
但有一个问题:每个插入都将创建一个新的hdfs文件,即使没有涉及任何记录。过多的碎片会随着时间的推移降低性能。
每周进行一次“压缩”作业会很有帮助(例如,重命名碎片表、重新创建表、从重命名的表插入覆盖、删除重命名的表)