国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Hive ACID事務(wù)表

這篇具有很好參考價值的文章主要介紹了Hive ACID事務(wù)表。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

環(huán)境:hive 3.1.0
執(zhí)行引擎:hive on tez

  1. 什么是hive ACID?
    hive官網(wǎng)對于ACID的介紹:
    https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions
    中文文檔關(guān)于ACID的介紹:
    https://www.docs4dev.com/docs/zh/apache-hive/3.1.1/reference/Hive_Transactions.html
    其實(shí)和傳統(tǒng)數(shù)據(jù)庫中所說的ACID有異曲同工之妙:
  2. 原子性(Atomicity
    原子性是指事務(wù)是一個不可分割的工作單位,事務(wù)中的操作要么全部成功,要么全部失敗。
  3. 一致性(Consistency
    事務(wù)必須使數(shù)據(jù)庫從一個一致性狀態(tài)變換到另外一個一致性狀態(tài)。
    舉例說明:張三向李四轉(zhuǎn)100元,轉(zhuǎn)賬前和轉(zhuǎn)賬后的數(shù)據(jù)是正確的狀態(tài),這就叫一致性,如果出現(xiàn)張三轉(zhuǎn)出100元,李四賬號沒有增加100元這就出現(xiàn)了數(shù)據(jù)錯誤,就沒有達(dá)到一致性。
  4. 隔離性(Isolation
    事務(wù)的隔離性是多個用戶并發(fā)訪問數(shù)據(jù)庫時,數(shù)據(jù)庫為每一個用戶開啟的事務(wù),不能被其他事務(wù)的操作數(shù)據(jù)所干擾,多個并發(fā)事務(wù)之間要相互隔離。
  5. 持久性(Durability
    持久性是指一個事務(wù)一旦被提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就是永久性的,接下來即使數(shù)據(jù)庫發(fā)生故障也不應(yīng)該對其有任何影響。
    其中事務(wù)Transaction)是訪問和更新數(shù)據(jù)庫的程序執(zhí)行單元;事務(wù)中可能包含一個或多個sql語句,而ACID是衡量事務(wù)的4個維度。hive0.13之后提供了行級別ACID,
    常見的INSERT、UPDATE和DELETE已經(jīng)在hive0.14開始支持,先創(chuàng)建一張默認(rèn)結(jié)構(gòu)的hive表
    create table test.trans_table1(column1 string,column2 string);
    SHOW CREATE TABLE查看其建表語句:
CREATE TABLE `test.trans_table1`(
  `column1` string, 
  `column2` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
  'hdfs://ambari-hadoop1:8020/warehouse/tablespace/managed/hive/test.db/trans_table1'
TBLPROPERTIES (
  'bucketing_version'='2', 
  'transactional'='true', 
  'transactional_properties'='default', 
  'transient_lastDdlTime'='1703744670')

發(fā)現(xiàn)其配置項(xiàng)中有三個和事務(wù)相關(guān)的選項(xiàng):

  • transactional:是否啟用表的事務(wù)支持
  • transactional_properties:指定了事務(wù)的屬性
    1.default: 默認(rèn)值,表示支持插入、更新、刪除操作。
    2.insert_only: 僅支持插入操作,不支持更新和刪除。
    3.insert_only_external: 僅支持插入操作,對于外部表。
  • transient_lastDdlTime:最后一次DDL日期時間
    hive默認(rèn)創(chuàng)建存儲格式為ORC的事務(wù)表,對表執(zhí)行一次insert values操作發(fā)現(xiàn)增加了一個delta開頭的目錄
    Hive ACID事務(wù)表,hive
    其下有兩個文件_orc_acid_version和bucket_00000
    Hive ACID事務(wù)表,hive
    而delete操作也同樣會生成目錄:
    Hive ACID事務(wù)表,hive
    而UPDATE操作則會同時生成兩個目錄:
    Hive ACID事務(wù)表,hive
    先創(chuàng)建一個delete前綴的目錄,再創(chuàng)建一個代表insert的delta前綴目錄,即先刪除后插入。
    以上目錄的命名規(guī)范格式為 delta_minWID_maxWID_stmtID,即 delta 前綴、寫事務(wù)的 ID 范圍、以及語句 ID。
  • 針對寫事務(wù)(INSERT、DELETE 等),Hive 還會創(chuàng)建一個寫事務(wù) ID(Write ID),該 ID 在表范圍內(nèi)唯一。
  • 語句 ID(Statement ID)則是當(dāng)一個事務(wù)中有多條寫入語句時使用的,用作唯一標(biāo)識。
    _orc_acid_version 的內(nèi)容是 2,即當(dāng)前 ACID 版本號是 2。而bucket開頭的文件則是實(shí)際的數(shù)據(jù)內(nèi)容,由于存儲格式是ORC,可以使用以下方法查看:
    hive --orcfiledump /warehouse/tablespace/managed/hive/test.db/trans_table1/delta_0000001_0000001_0000/bucket_00000
    可以查看相關(guān)元數(shù)據(jù),但并非數(shù)據(jù)本身,這里不做過多解析:
    Hive ACID事務(wù)表,hive
    hive --orcfiledump -d /warehouse/tablespace/managed/hive/test.db/trans_table1/delta_0000001_0000001_0000/bucket_00000
    則可以查看相關(guān)數(shù)據(jù)內(nèi)容:
    Hive ACID事務(wù)表,hive
  • operation 0 表示插入,1 表示更新,2 表示刪除。由于使用了 split-update,UPDATE 是不會出現(xiàn)的;
  • originalTransaction是該條記錄的原始寫事務(wù) ID。對于 INSERT 操作,該值和 currentTransaction是一致的。對于 DELETE,則是該條記錄第一次插入時的寫事務(wù) ID;
  • bucket是一個 32 位整型,由 BucketCodec 編碼,各個二進(jìn)制位的含義為:
    1-3 位:編碼版本,當(dāng)前是 001;
    4 位:保留;
    5-16 位:分桶 ID,由 0 開始。分桶 ID 是由 CLUSTERED BY 子句所指定的字段、以及分桶的數(shù)量決定的。該值和 bucket_N 中的 N 一致;
    17-20 位:保留;
    21-32 位:語句 ID;
    舉例來說,整型 536936448 的二進(jìn)制格式為 00100000000000010000000000000000,即它是按版本 1 的格式編碼的,分桶 ID 為 1;
  • rowId 是一個自增的唯一 ID,在寫事務(wù)和分桶的組合中唯一;
  • currentTransaction 當(dāng)前的寫事務(wù) ID;
  • row 具體數(shù)據(jù)。對于 DELETE 語句,則為 null
    還可以通過 row__id 這個虛擬列進(jìn)行查看(originalTransaction, bucket, rowId)
    select row__id,column1,column2 from test.trans_table1;
    Hive ACID事務(wù)表,hive
    注意row__id是兩個"_"符合。
    還有個問題由于每次DML的執(zhí)行都會產(chǎn)生對應(yīng)小文件,隨著時間推移DML執(zhí)行次數(shù)的增多,會產(chǎn)生越來越多的小文件,而過多的小文件對HDFS會產(chǎn)生不利的影響,比如增加namenode的內(nèi)存占用等等,為此hive引入了壓縮Compaction的概念。
    Minor Compaction 會將所有的 delta 文件壓縮為一個文件,delete 也壓縮為一個。壓縮后的結(jié)果文件名中會包含寫事務(wù) ID 范圍,同時省略掉語句 ID。壓縮過程是在 Hive Metastore 中運(yùn)行的,會根據(jù)一定閾值自動觸發(fā)。我們也可以使用如下語句人工觸發(fā):
    ALTER TABLE trans_table1 COMPACT 'minor';
    壓縮前:
    Hive ACID事務(wù)表,hive
    壓縮后:
    Hive ACID事務(wù)表,hive
    查看壓縮后的文件發(fā)現(xiàn),插入操作產(chǎn)生的數(shù)據(jù)都被合并起來:
    Hive ACID事務(wù)表,hive
    同樣刪除操作的數(shù)據(jù)也被合并在了一起:
    Hive ACID事務(wù)表,hive
    因此Minor Compaction 不會刪除任何數(shù)據(jù)。
    Major Compaction則會將所有文件合并為一個文件,以 base_N 的形式命名,其中 N 表示最新的寫事務(wù) ID。已刪除的數(shù)據(jù)將在這個過程中被剔除。
    major前:
    Hive ACID事務(wù)表,hive
    major后:
    Hive ACID事務(wù)表,hive
    ??需要注意的是,在 Minor 或 Major Compaction 執(zhí)行之后,原來的文件不會被立刻刪除。這是因?yàn)閯h除的動作是在另一個名為 Cleaner 的線程中執(zhí)行的。因此,表中可能同時存在不同事務(wù) ID 的文件組合,這在讀取過程中需要做特殊處理。
    有了大致的了解后,是否任意存儲格式的表均具有ACID特性?
    首先TextFile,默認(rèn)建表語句中關(guān)于事務(wù)的配置項(xiàng):
    'transactional'='true', 'transactional_properties'='insert_only',
    可以執(zhí)行insert操作,但是無法執(zhí)行delete和update,報錯:
    Error: Error while compiling statement: FAILED: SemanticException [Error 10414]: Attempt to do update or delete on table test.text_table1 that is insert-only transactional (state=42000,code=10414)
    嘗試修改transactional_properties值為default,但是無法修改:
    Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Cannot convert an ACID table to non-ACID (state=08S01,code=1)
    官網(wǎng)的意思是目前僅支持ORC格式的hive表:
    Hive ACID事務(wù)表,hive
    此外Hive ACID還存在一些限制,感興趣可以進(jìn)一步了解:
    https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions#:~:text=SQL%20MERGE%20statement.-,Limitations,-BEGIN%2C%20COMMIT

本博客為學(xué)習(xí)所記,意在備忘所學(xué)過程,故有引用之處,其中參考博客有:

  1. 深入學(xué)習(xí)MySQL事務(wù):ACID特性的實(shí)現(xiàn)原理https://www.cnblogs.com/kismetv/p/10331633.html

  2. 實(shí)戰(zhàn) | 深入理解 Hive ACID 事務(wù)表
    https://blog.csdn.net/zjerryj/article/details/91470261文章來源地址http://www.zghlxwxcb.cn/news/detail-806971.html

到了這里,關(guān)于Hive ACID事務(wù)表的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Hive(20):Transaction事務(wù)

    1 Hive事務(wù)背景知識 Hive本身從設(shè)計之初時,就是不支持事務(wù)的,因?yàn)镠ive的核心目標(biāo)是將已經(jīng)存在的結(jié)構(gòu)化數(shù)據(jù)文件映射成為表,然后提供基于表的SQL分析處理,是一款面向分析的工具。 并且Hive映射的數(shù)據(jù)通常存儲于HDFS上,而HDFS是不支持隨機(jī)修改文件數(shù)據(jù)的。 這個定位就意

    2024年02月16日
    瀏覽(67)
  • Hive 事務(wù)表 (Transactional Tables)

    Hive 事務(wù)表 (Transactional Tables)

    Hive 原本是不支持事務(wù)的,也就是不支持 增刪改(insert、delete、update)、回滾等 操作的。因?yàn)椋?Hive的核心目標(biāo)是: 將已經(jīng)存在的結(jié)構(gòu)化數(shù)據(jù)文件映射成為表,然后提供基于表的SQL分析處理。也就是說Hive是面向分析的,并不是面向設(shè)計的。 HDFS不支持隨機(jī)修改文件。 但是隨著技

    2023年04月19日
    瀏覽(26)
  • Hive(11):Transactional Tables事務(wù)表

    1 Hive事務(wù)背景知識 Hive本身從設(shè)計之初時,就是不支持事務(wù)的,因?yàn)镠ive的核心目標(biāo)是將已經(jīng)存在的結(jié)構(gòu)化數(shù)據(jù)文件映射成為表,然后提供基于表的SQL分析處理,是一款面向分析的工具。且映射的數(shù)據(jù)通常存儲于HDFS上,而HDFS是不支持隨機(jī)修改文件數(shù)據(jù)的。 這個定位就意味著在

    2024年02月11日
    瀏覽(19)
  • Hive 托管表、外部表和事務(wù)表

    Hive是一個基于Hadoop的數(shù)據(jù)倉庫基礎(chǔ)架構(gòu),用于處理大規(guī)模數(shù)據(jù)集。Hive允許你使用類似于SQL的查詢語言(稱為HiveQL)來分析存儲在Hadoop集群上的數(shù)據(jù)。在Hive中,表是數(shù)據(jù)的邏輯組織單元,你可以通過創(chuàng)建和管理表來組織和操作數(shù)據(jù)。 Hive支持兩種類型的表:托管表(Managed Ta

    2024年02月17日
    瀏覽(14)
  • 5、hive的load、insert、事務(wù)表使用詳解及示例

    5、hive的load、insert、事務(wù)表使用詳解及示例

    1、apache-hive-3.1.2簡介及部署(三種部署方式-內(nèi)嵌模式、本地模式和遠(yuǎn)程模式)及驗(yàn)證詳解 2、hive相關(guān)概念詳解–架構(gòu)、讀寫文件機(jī)制、數(shù)據(jù)存儲 3、hive的使用示例詳解-建表、數(shù)據(jù)類型詳解、內(nèi)部外部表、分區(qū)表、分桶表 4、hive的使用示例詳解-事務(wù)表、視圖、物化視圖、DDL

    2024年02月09日
    瀏覽(25)
  • [MySQL]事務(wù)ACID詳解

    [MySQL]事務(wù)ACID詳解

    專欄簡介 :MySql數(shù)據(jù)庫從入門到進(jìn)階. 題目來源:leetcode,???劍指offer. 創(chuàng)作目標(biāo):記錄學(xué)習(xí)MySql學(xué)習(xí)歷程 希望在提升自己的同時,幫助他人,,與大家一起共同進(jìn)步,互相成長. 學(xué)歷代表過去,能力代表現(xiàn)在,學(xué)習(xí)能力代表未來!? 1.?事務(wù)的概念 2. 事務(wù)的特性 3.事務(wù)控制語法 4. 事務(wù)并發(fā)異

    2023年04月08日
    瀏覽(17)
  • 事務(wù),不只ACID

    應(yīng)用在運(yùn)行時可能會發(fā)生數(shù)據(jù)庫、硬件的故障,應(yīng)用與數(shù)據(jù)庫的網(wǎng)絡(luò)連接斷開或多個客戶端端并發(fā)修改數(shù)據(jù)導(dǎo)致預(yù)期之外的數(shù)據(jù)覆蓋問題,為了提高應(yīng)用的可靠性和數(shù)據(jù)的一致性, 事務(wù) 應(yīng)運(yùn)而生。 從概念上講,事務(wù)是 應(yīng)用程序?qū)⒍鄠€讀寫操作組合成一個邏輯單元的一種形式

    2024年02月14日
    瀏覽(19)
  • 4、hive的使用示例詳解-事務(wù)表、視圖、物化視圖、DDL(數(shù)據(jù)庫、表以及分區(qū))管理詳細(xì)操作

    4、hive的使用示例詳解-事務(wù)表、視圖、物化視圖、DDL(數(shù)據(jù)庫、表以及分區(qū))管理詳細(xì)操作

    1、apache-hive-3.1.2簡介及部署(三種部署方式-內(nèi)嵌模式、本地模式和遠(yuǎn)程模式)及驗(yàn)證詳解 2、hive相關(guān)概念詳解–架構(gòu)、讀寫文件機(jī)制、數(shù)據(jù)存儲 3、hive的使用示例詳解-建表、數(shù)據(jù)類型詳解、內(nèi)部外部表、分區(qū)表、分桶表 4、hive的使用示例詳解-事務(wù)表、視圖、物化視圖、DDL

    2024年02月09日
    瀏覽(26)
  • 事務(wù),不只ACID | 京東物流技術(shù)團(tuán)隊(duì)

    事務(wù),不只ACID | 京東物流技術(shù)團(tuán)隊(duì)

    1. 什么是事務(wù)? 應(yīng)用在運(yùn)行時可能會發(fā)生數(shù)據(jù)庫、硬件的故障,應(yīng)用與數(shù)據(jù)庫的網(wǎng)絡(luò)連接斷開或多個客戶端端并發(fā)修改數(shù)據(jù)導(dǎo)致預(yù)期之外的數(shù)據(jù)覆蓋問題,為了提高應(yīng)用的可靠性和數(shù)據(jù)的一致性, 事務(wù) 應(yīng)運(yùn)而生。 從概念上講,事務(wù)是 應(yīng)用程序?qū)⒍鄠€讀寫操作組合成一個邏

    2024年02月13日
    瀏覽(16)
  • 事務(wù)的ACID屬性是什么?為什么它們很重要?

    在現(xiàn)代的數(shù)據(jù)庫和事務(wù)處理系統(tǒng)中,事務(wù)處理是一項(xiàng)非常重要的技術(shù)。在數(shù)據(jù)庫中,事務(wù)是指一組被視為單個邏輯操作單元的SQL語句序列,它們要么全部成功執(zhí)行,要么全部不執(zhí)行。事務(wù)可以確保數(shù)據(jù)庫在執(zhí)行時保持一致性和可靠性。ACID屬性是事務(wù)處理系統(tǒng)中的四個基本屬性

    2024年01月18日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包