hive 支援更新

2022-05-04 06:09:14 字數 976 閱讀 5887

因為業務要求,需要對hive表進行delete,在官網查詢後,發現update和delete是一類問題。在此總結下如何實現hive表的delete和update。

首先,先看下官網關於update和delete的相關說明,使用注意事項也請參考官網說明,這裡只介紹如何實現相關功能。

綜合上述資訊,hive自0.14版本開始支援update和delete,要執行update和delete的表必須支援acid,而關於acid的詳細介紹,需要檢視hive transactions.

綜合上述資訊,可以得出以下結論:

如果乙個表要實現update和delete功能,該錶就必須支援acid,而支援acid,就必須滿足以下條件:

1、表的儲存格式必須是orc(stored as orc);

2、表必須進行分桶(clustered by (col_name, col_name, ...)  into num_buckets buckets);

3、table property中引數transactional必須設定為true(tblproperties('transactional'='true'));

4、以下配置項必須被設定:

client端:

服務端:

注意:上述配置項必須區分client端和服務端。在cloudera manager上可以分別新增(hive—>配置—>高階),在更新部署配置資訊的時候需要勾選部署客戶端配置(預設是勾選的)。

hive增量更新

很多資料需要進行更新,如使用者資訊修改。hive0.11之後開始支援update和delete。但是hive頻繁更新與hive的設計原則相反,並且hive增量更新很緩慢。為實現增量更新,我們可以採用union all進行關聯或在乙個分割槽表中求最新的日期的資料。select b.id,b.conte...

Hive 的事務支援

hive 開始支援事務,是在 hive 0.14 之後。hdfs 的檔案,只能允許新建,刪除,對檔案中的內容進行更新,不允許單條修改。hive 的檔案儲存是基於 hdfs 檔案存在的,所以原則上不會直接對 hdfs 做檔案內容的事務更新,只能是採取另外的手段來完成。即用 hdfs 檔案作為原始資料,...

hive 實現增量更新

保險公司有乙個表記錄客戶的資訊,其中包括有客戶的id,name和age 為了演示只列出這幾個字段 建立hive的表 create table customer id int,age tinyint,name string partitioned by dt string row format del...