文章目录

  • 数据操纵DML
  • Hive 事务
  • 开启hive事务需要的配置
  • Hive 事务操作


数据操纵DML

  1. 数据操纵语言DML(Data Manipulation Language),DML主要有三种形式:插入(INSERT)、删除(DELETE)、更新(UPDATE)。

Hive 事务

事务的概念

  1. 事务(transaction)是一组单元化操作,这些操作要么都执行,要么都不执行,是一个不可分割的工作单元。
  2. 事务具有的四个要素:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),这四个基本要素通常称为ACID特性。
  1. 原子性。一个事务是一个不可再分割的工作单位,事务中的所有操作要么都发生,要么都不发生。
  2. 一致性。事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。
  3. 隔离性。在并发环境中,并发的事务是相互隔离的,一个事务的执行不能被其他事务干扰。即不同的事务并发操纵相同的数据时,每个事务都有各自完整的数据空间,即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
  4. 持久性。事务一旦提交,它对数据库中数据的改变就应该是永久性的。

Hive中的事务

  1. Hive支持事务和行级更新,但默认是不支持的,需要一些附加的配置。要想支持行级insert、update、delete,需要配置Hive支持事务。

Hive 事务的限制:

  1. Hive提供行级别的ACID语义,并且BEGIN、COMMIT、ROLLBACK 暂时不支持,所有操作自动提交
  2. Hive事务只支持ORC的文件格式
  3. 默认事务是关闭的,需要设置开启,并且要是使用事务特性,表必须是分桶的,并且还必须是内部表
  4. 如果一个表用于ACID写入(INSERT、UPDATE、DELETE),必须在表中设置表属性 : “transactional=true”
  5. 必须使用事务管理器 org.apache.hadoop.hive.ql.lockmgr.DbTxnManager
  6. 目前支持快照级别的隔离。就是当一次数据查询时,会提供一个数据一致性的快照
  7. LOAD DATA语句目前在事务表中暂时不支持
  8. HDFS是不支持文件的修改;并且当有数据追加到文件,HDFS不对读数据的用户提供一致性的。
  9. 为了在HDFS上支持数据的更新:
  1. 表和分区的数据都被存在基本文件中(base files)
  2. 新的记录和更新,删除都存在增量文件中(delta files)
  3. 一个事务操作创建一系列的增量文件
  4. 在读取的时候,将基础文件和修改,删除合并,最后返回给查询

开启hive事务需要的配置

SET hive.support.concurrency = true;
-- Hive 0.x and 1.x only
SET hive.enforce.bucketing = true;
SET hive.exec.dynamic.partition.mode = nonstrict;
SET hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;

Hive 事务操作

  1. 创建表用于更新。满足条件:内部表、ORC格式、分桶、设置表属性
create table zxz_data(
	name string,
	nid int,
	phone string,
	ntime date)
clustered by(nid) into 5 buckets
stored as orc
tblproperties('transactional'='true');

hive (default)> select * from zxz_data;
OK
zxz_data.name	zxz_data.nid	zxz_data.phone	zxz_data.ntime
	NULL	NULL	NULL
name5	5	010-83596208	2020-01-05
name1	1	010-83596208	2020-01-01
name2	2	027-63277201	2020-01-02
name3	3	010-83596208	2020-01-03
name4	4	010-83596208	2020-01-04
Time taken: 0.2 seconds, Fetched: 6 row(s)
hive (default)> dfs -ls /user/hive/warehouse/zxz_data;
Found 1 items 
drwxr-xr-x   - root supergroup          0 2021-07-27 10:42 /user/hive/warehouse/zxz_data/delta_0000001_0000001_0000
  1. DML(删除,插入)操作,
-- 删除
hive (default)> delete from zxz_data where nid = 3;

hive (default)> dfs -ls /user/hive/warehouse/zxz_data;
Found 3 items
drwxr-xr-x   - root supergroup          0 2021-07-27 11:12 /user/hive/warehouse/zxz_data/.hive-staging_hive_2021-07-27_11-11-24_803_1918115363652822095-1
drwxr-xr-x   - root supergroup          0 2021-07-27 10:42 /user/hive/warehouse/zxz_data/delta_0000001_0000001_0000
drwxr-xr-x   - root supergroup          0 2021-07-27 11:12 /user/hive/warehouse/zxz_data/delta_0000002_0000002_0000
-- 插入
hive (default)> insert into zxz_data values ("name3", 3, "010-83596208",  "2020-06-01");
hive (default)> dfs -ls /user/hive/warehouse/zxz_data;
Found 4 items
drwxr-xr-x   - root supergroup          0 2021-07-27 11:12 /user/hive/warehouse/zxz_data/.hive-staging_hive_2021-07-27_11-11-24_803_1918115363652822095-1
drwxr-xr-x   - root supergroup          0 2021-07-27 10:42 /user/hive/warehouse/zxz_data/delta_0000001_0000001_0000
drwxr-xr-x   - root supergroup          0 2021-07-27 11:12 /user/hive/warehouse/zxz_data/delta_0000002_0000002_0000
drwxr-xr-x   - root supergroup          0 2021-07-27 11:28 /user/hive/warehouse/zxz_data/delta_0000003_0000003_0000

hive (default)> update zxz_data set name=concat(name, "00") where nid>3;

hive (default)> dfs -ls /user/hive/warehouse/zxz_data;
Found 4 items
drwxr-xr-x   - root supergroup          0 2021-07-27 11:12 /user/hive/warehouse/zxz_data/.hive-staging_hive_2021-07-27_11-11-24_803_1918115363652822095-1
drwxr-xr-x   - root supergroup          0 2021-07-27 10:42 /user/hive/warehouse/zxz_data/delta_0000001_0000001_0000
drwxr-xr-x   - root supergroup          0 2021-07-27 11:12 /user/hive/warehouse/zxz_data/delta_0000002_0000002_0000
drwxr-xr-x   - root supergroup          0 2021-07-27 11:28 /user/hive/warehouse/zxz_data/delta_0000003_0000003_0000
drwxr-xr-x   - root supergroup          0 2021-07-27 11:38 /user/hive/warehouse/zxz_data/delta_0000004_0000004_0000