2016-04-25 285 views
0

我的目標是使用Informatica ETL工具的Hive表。使用Informatica的Hive更新

Hive早期版本不支持更新。 那麼我應該如何更新記錄在這種情況下。 可以使用Hive ACID和事務功能來使用Hive更新功能。

+0

插入更新事件並做一個map/reduce來獲得當前答案? – jpopesculian

+0

我想使用informatica更新配置單元數據,但配置單元不允許更新,所以任何解決此問題? – shashank

回答

0

你應該看看事件採購(https://msdn.microsoft.com/en-us/library/dn589792.aspx)。

將您的數據庫視爲存儲事件而不是項目。因此,如果您想要在數據庫中使用某個counter對象,而不是將counter從0更新爲1到2等,則只需在增量時插入新文檔,然後獲取這些文檔的總和/數量。

1

Informatica支持從Informatica 9.6 HF3版本更新配置單元表提供表支持ACID,有關更多信息,您可以參考此鏈接(https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions),但不是這樣做,我寧願在兩個步驟過程

1)確定僅存在於目標中的所有記錄以及僅存在於階段數據中的記錄2)合併這兩個並將它們加載到臨時表中。 3)最後重新命名臨時表到實際的目標表名

以上會的工作只有SCD型1實現

1

更新是不是最好的選擇,而工作蜂巢,創建中間臨時表是更好的設計。更新現有Hive表的步驟 -

  1. 假設您正在使用table-tbl_employee並希望更新幾行。
  2. 使用更新的列數據創建具有完全相同記錄數的新中間表 - tbl_employee_update。
  3. 創建新的中間表,其中包含來自原始表tbl_employee的數據減去tbl_employee_update中已存在的行。作爲tbl_employee_retained
  4. 待辦事項工會在tbl_employee_retained和tbl_employee_update並將它命名爲tbl_employee_temp
  5. 現在首先確保tbl_employee_temp是有記錄和其他完整性檢查更換tbl_employee_temp tbl_employee命名此表。