从另一个配置单元表刷新一个配置单元表

Posted

技术标签:

【中文标题】从另一个配置单元表刷新一个配置单元表【英文标题】:Refresh one hive table from another hive table 【发布时间】:2015-08-14 07:16:35 【问题描述】:

我有几个 Hive 表,我使用 Sqoop 每小时增量导入从 RDBMS 中引入这些表,并将它们分阶段。我正在加入这些表并创建新的维度表。每当我将 RDBMS 中的新行引入 Hive 临时表时,我都必须刷新维度表。如果没有新行,则不应该刷新暗表。我使用的蜂巢版本没有 ACID 功能。

需要一些关于如何在 hive 中实现这一点的建议。

【问题讨论】:

您能否展示一些您正在使用的当前 HiveQL 语句的示例? 试试parttion? 【参考方案1】:

您可以在现有 Hive 表中插入新数据,就像任何其他数据库一样。而且 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)

但有一个问题:每个 INSERT 都会创建一个新的 HDFS 文件,即使涉及的记录为零。随着时间的推移,过多的碎片会降低性能。

每周“压缩”作业会很有帮助(例如,重命名碎片表、重新创建表、从重命名的表中插入覆盖、删除重命名)

【讨论】:

以上是关于从另一个配置单元表刷新一个配置单元表的主要内容,如果未能解决你的问题,请参考以下文章

使用 pyspark 来自 JSON 数据的 Hive 表

在配置单元中添加具有恒定值的新列

从具有多个分区列的配置单元表中获取最新数据

可以从另一个配置单元脚本运行配置单元脚本吗?

如何使用配置单元外部配置单元表创建一个空数据框?

使用 java 创建具有约束的配置单元表并使用 jdbc 程序检查配置单元表的列约束