Hive 中高效的增量資料更新
Hive 提供了各種在主表中增量更新資料的方法。讓我們探討一下最有效的方法。
Full Outer Join
如果 ACID 模式的合併操作不可用,您可以使用 Full Outer Join 來尋找要合併的項目。更新:
insert overwrite target_data [partition() if applicable] SELECT case when i.PK is not null then i.PK else t.PK end as PK, case when i.PK is not null then i.COL1 else t.COL1 end as COL1, ... case when i.PK is not null then i.COL_n else t.COL_n end as COL_n FROM target_data t --restrict partitions if applicable FULL JOIN increment_data i on (t.PK=i.PK);
將所有與行合併Number
或者,您可以將UNION ALL 與row_number() 一起使用以避免完全聯結:
INSERT INTO target_data (pk, col1, col2, ...) SELECT pk, col1, col2, ... FROM increment_data WHERE pk NOT IN (SELECT pk FROM target_data) UNION ALL SELECT pk, col1, col2, ... FROM target_data;
如果您希望使用以下值更新所有列,此解決方案特別有效新資料。
分區最佳化
至為了提高效能,您可以使用 WHEREpartition_colIN(selectdistinctpartition_colfromincrement_data)子句限制 target_data 表中將被覆蓋的分區。此外,將分區清單作為 WHERE 子句中的參數傳遞可以進一步加速操作。
以上是Hive中如何有效率地執行增量資料更新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!