当前位置: 首页 > news >正文

Hive 创建事务表的方法

Hive 从 0.13 版本开始支持事务(ACID)功能,但完整的事务支持是在 Hive 3.0 及更高版本中实现的。以下是创建和使用 Hive 事务表的详细方法。

## 前提条件

在创建事务表之前,需要确保以下配置已设置:

-- 启用Hive事务支持

SET hive.support.concurrency=true;
SET hive.enforce.bucketing=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
SET hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;

-- 对于Hive 3.0+还需要设置(默认已包含)

SET hive.compactor.initiator.on=true;
SET hive.compactor.worker.threads=1;

## 创建事务表的基本语法

CREATE [EXTERNAL] TABLE table_name (column1 data_type,column2 data_type,...
)
[PARTITIONED BY (partition_column data_type, ...)]
CLUSTERED BY (bucket_column) INTO n BUCKETS
STORED AS ORC
TBLPROPERTIES ('transactional'='true',-- 可选属性'orc.compress'='SNAPPY','bucket_count'='n'
);

## 完整示例

### 示例1:创建基本事务表

CREATE TABLE transactional_table (id INT,name STRING,value DOUBLE,update_time TIMESTAMP
)
CLUSTERED BY (id) INTO 4 BUCKETS
STORED AS ORC
TBLPROPERTIES ('transactional'='true','orc.compress'='SNAPPY'
);

### 示例2:创建分区事务表

CREATE TABLE partitioned_transactional_table (id INT,name STRING,amount DECIMAL(10,2),trans_date TIMESTAMP
)
PARTITIONED BY (department STRING)
CLUSTERED BY (id) INTO 4 BUCKETS
STORED AS ORC
TBLPROPERTIES ('transactional'='true','orc.compress'='ZLIB'
);

### 示例3:带有主键约束的事务表(Hive 3.0+)

CREATE TABLE acid_with_pk (id INT PRIMARY KEY,name STRING,salary DECIMAL(10,2)
)
CLUSTERED BY (id) INTO 2 BUCKETS
STORED AS ORC
TBLPROPERTIES ('transactional'='true','transactional_properties'='default','orc.compress'='SNAPPY'
);

## 事务表操作示例

### 插入数据

INSERT INTO TABLE transactional_table VALUES 
(1, 'Item A', 100.50, CURRENT_TIMESTAMP),
(2, 'Item B', 200.75, CURRENT_TIMESTAMP);

### 更新数据

UPDATE transactional_table 
SET value = 150.00 
WHERE id = 1;

### 删除数据

DELETE FROM transactional_table 
WHERE id = 2;

### 合并操作(MERGE)

MERGE INTO transactional_table AS target
USING updates_source AS source
ON target.id = source.id
WHEN MATCHED AND source.op = 'update' THENUPDATE SET value = source.value, update_time = CURRENT_TIMESTAMP
WHEN MATCHED AND source.op = 'delete' THENDELETE
WHEN NOT MATCHED THENINSERT VALUES (source.id, source.name, source.value, CURRENT_TIMESTAMP);

## 重要注意事项

1. 存储格式要求:事务表必须使用 ORC 存储格式
2. 分桶要求:事务表必须分桶(CLUSTERED BY)
3. 性能考虑:
- 小文件合并(compaction)会影响性能
- 适合频繁更新的场景,纯追加数据场景不需要事务表
4. 版本兼容性:
- Hive 3.0+ 提供完整的事务支持
- 早期版本(0.14-2.x)功能有限
5. 元数据管理:可以使用 `SHOW TRANSACTIONS` 查看当前事务

对于大多数数据仓库场景,如果主要是批量加载和查询操作,使用普通表而非事务表通常性能更好。

http://www.lryc.cn/news/619322.html

相关文章:

  • 自建知识库,向量数据库 体系建设(四)之文本向量与相似度计算——仙盟创梦IDE
  • java中list的api详细使用
  • 无人机航拍数据集|第15期 无人机人员目标检测YOLO数据集4923张yolov11/yolov8/yolov5可训练
  • pt-online-schema-change 全解析:MySQL 表结构变更的安全之道
  • clickhouse集群的安装与部署
  • Vue3 使用 echarts 甘特图(GanttChart)
  • Java -- Vector底层结构-- ArrayList和LinkedList的比较
  • C++主流string的使用
  • 工业元宇宙:迈向星辰大海的“玄奘之路”
  • C++ 类和对象4---(初始化列表,类型转化,static成员)
  • nuxt相比于vue的优点
  • java-泛型接口
  • C++多态:理解面向对象的“一个接口,多种实现”
  • 智能算法流程图在临床工作中的编程视角系统分析
  • 【算法】位运算经典例题
  • 论“证明的终点”:从“定义域 = 正确”看西方体系的自证困境
  • 模式设计:策略模式及其应用场景
  • 全面深入-JVM虚拟机
  • 神经网络的核心组件解析:从理论到实践
  • Deep Agents:用于复杂任务自动化的 AI 代理框架
  • 什么是HTTP的无状态(举例详解)
  • python的游戏评级论坛系统
  • 面试实战 问题三十 HTTP协议中TCP三次握手与四次挥手详解
  • 字体优化:Web 排版最佳实践
  • 【cs336学习笔记】[第5课]详解GPU架构,性能优化
  • Debian 网络服务管理的深度解析:传统与现代工具的碰撞
  • 三方相机问题分析六:【没用相机,诡异的手电筒不可使用】下拉状态栏,手电筒置灰,无法打开,提提示相机正在使用
  • YOLOv1 到 YOLOv2 模型训练过程全解析
  • Java面试宝典:ZGC
  • 大模型能力评测方式很多?