我们正在使用Hive,并且数据流看起来像:
SOURCE -> Flume -> S3 Buckets -> Script -> Hive Table
我们有一个看似类似的表,为简洁而截断:
CREATE TABLE core_table (
unique_id string
update bigint
other_data string
)
现在我们也有了更新表 - 相同的结构core_update
这个表可能包含重复的数据(例如重复的unique_id,但是增加bigint,它也会在文件后面订购)。
是否有一种很好的方法可以将core_update
中的更新应用到core_table
,同时向表中添加新的unique_id并更新基础数据。
- 注意:我试图避免看起来像这样的东西:MERGE - > DEDUP因为这个过程在较小的数据集上花了大约3个小时,而且我们有一个数据集是巨大的。所以做一些类似于插入排序的东西会很棒。
更新:由IBM http://ibm.co/15bMSxk发现以下博文:它说:
算法-2:更新到未分区的表
步骤-1 运行合并连接查询输入:mainTable,用于保存合并记录的临时表名称(调用为stagingTable3),未分区的登台表名称(调用为stagingTable2),表主键,表字段 构建合并连接查询:
插入覆盖表stagingTable3 选择“List tableFields”中的每一列 使用别名A添加字段名称 来自mainTable和别名A. 使用带别名B的stagingTable2应用左外连接 检查A.primaryKey = B.primaryKey的位置以及B.primaryKey为空的位置
然后与从stagingTable2
步骤2:使用下面给定的加载查询,通过从stagingTable3覆盖到mainTable来加载数据:
load data inpath stagingTable3 overwrite into mainTable
然而,这仍然没有意义(或在我的解释中工作)。