HIVE中資料更新 update 操作的實現

2021-07-09 05:41:18 字數 1250 閱讀 5497

資料更新是一種常見的操作,然後資料倉儲的概念一般要求的是資料是整合、穩定的。hive作為一種分布式環境下以hdfs為支撐的資料倉儲,它同樣更多的要求資料是不可變的。

然而現實很多任務中,往往需要對資料進行更新操作,經查,hive自0.11版本之後就提供了更新操作。於是想著試驗一下,看看hive更新的操作和效能。

按照網上辦法進行設定.

hive.support.concurrency – true

hive.enforce.bucketing – true (not required as of hive 2.0)

hive.exec.dynamic.partition.mode – nonstrict

hive.txn.manager – org.apache.hadoop.hive.ql.lockmgr.dbtxnmanager

hive.compactor.initiator.on – true (for exactly one instance of the thrift metastore service)

hive.compactor.worker.threads – a positive

同樣在建表後面新增: stored as orc tblproperties('transactional'='true'); 以支援acid的要求.

如以簡單的表進行實驗:(id int ,name string) , 隨意匯入幾條資料,進行測試.

寫入更新操作命令: update ** set name ='aaa' where id =1;

得到結果如下:

似乎這樣操作,hive對update操作就非常好的。其實經過實驗,發現hive的更新機制速度非常的慢,在乙個僅僅為6行的資料測試,其花費時間也要180s,這種效率肯定是無法忍受的。猜測其原因可能需要讀出原有的表,進行更新,然後再寫回hdfs?僅僅是猜測而已。

另外乙個非常頭疼的事情是,這種hive環境下支援acid的表,竟然只能在hive內部才能訪問到,而在beeline或者spark環境下,居然是無法獲得資料的。或者對外不提供介面。(中間那行居然不顯示資料!!!!)

access 資料更新update

1 單錶內字段更新 update pipeline set state 0 where address 33 2 兩個表間關聯更新 在access資料庫中,update指令不能夠含有from語句。因此在多表關聯批量更新資料時操作不是那麼方便。update table1 as t1,table2 as...

201307 UPDATE更新資料

在更新14萬多條資料的時候,發現 索引建的 不合理,你將更新不了,報錯,當然一種方法是分幾種情況更新。這是笨的方法 最應該的方式是 找到更新走的條件,合理建立索引.最好是能走索引,主鍵 最多幾分鐘搞定 要不然,你就等吧,create index idx tablename column on tab...

在UPDATE巢狀表更新資料

分享乙個update語句中使用from的sql語句 以下例子供大家學習 bbs表的表結構sql語句 if exists select from dbo.sysobjects where id object id n dbo bbs and objectproperty id,n isusertabl...