Hive Transaction

http://www.aboutyun.com/thread-21615-1-1.html

好文章

 

Hive从0.13开始加入了事务支持,在行级别提供完整的ACID特性,Hive在0.14时加入了对INSERT...VALUES,UPDATE,and DELETE的支持。对于在Hive中使用ACID和Transactions,主要有以下限制:

  •     不支持BEGIN,COMMIT和ROLLBACK
  •     只支持ORC文件格式
  •     表必须分桶
  •     不允许从一个非ACID连接写入/读取ACID表

为了使Hive支持事务操作,需将以下参数加入到hive-site.xml文件中。

<property>

<name>hive.support.concurrency</name>

<value>true</value>

</property>

<property>

<name>hive.enforce.bucketing</name>

<value>true</value>

</property>

<property>

<name>hive.exec.dynamic.partition.mode</name>

<value>nonstrict</value>

</property>

<property>

<name>hive.txn.manager</name>

<value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>

</property>

<property>

<name>hive.compactor.initiator.on</name>

<value>true</value>

</property>

<property>

<name>hive.compactor.worker.threads </name>

<value>1</value>

</property>

 

 

当hive.support.concurrency=True,就会共享锁和排它锁出现干预查询

hive未配置Transaction和ACID,不支持delete和update操作

 

create table test_trancaction
(user_id Int,name String)
clustered by (user_id) into 3 buckets stored as orc TBLPROPERTIES ('transactional'='true');

 

### Hive 的应用场景及其实现方式 #### 应用场景概述 Hive 是一种构建于 Hadoop 之上的数据仓库工具,它允许用户通过类 SQL 查询语言(称为 HiveQL)来查询存储在分布式文件系统中的大规模数据集。由于其高效的批处理能力以及与 Hadoop 生态系统的无缝集成,Hive 成为了大数据分析领域的重要工具之一[^1]。 以下是 Hive 的一些典型应用场景: --- #### 场景一:统计分析 对于需要定期汇总统计数据的需求,Hive 提供了一种简单易用的方式来进行批量计算。例如,在电商平台上,可以使用 Hive 来统计用户的访问行为并生成报告。具体来说,可以通过以下 SQL 实现对每个用户每月最大单月访问次数和累计总访问次数的统计[^2]: ```sql WITH monthly_visits AS ( SELECT user_id, YEAR(time) AS year, MONTH(time) AS month, COUNT(*) AS visit_count FROM taobao_user_data1 GROUP BY user_id, YEAR(time), MONTH(time) ), cumulative_visits AS ( SELECT mv.user_id, mv.year, mv.month, MAX(mv.visit_count) OVER (PARTITION BY mv.user_id ORDER BY mv.year, mv.month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS max_monthly_visit, SUM(mv.visit_count) OVER (PARTITION BY mv.user_id ORDER BY mv.year, mv.month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_total_visit FROM monthly_visits mv ) SELECT * FROM cumulative_visits; ``` 上述代码展示了如何利用窗口函数 `MAX` 和 `SUM` 对数据进行分组聚合,并进一步计算出每个月的最大单月访问次数和累积访问总数。 --- #### 场景二:日志数据分析 许多互联网服务会产生大量的日志数据,这些数据通常以结构化或半结构化的形式存在。Hive 可用于加载此类日志数据并对它们执行复杂的查询操作。例如,假设有一个名为 `access_logs` 的,其中包含了 Web 请求的时间戳、IP 地址和其他相关信息,则可以用如下语句提取特定时间段内的请求分布情况: ```sql SELECT hour, count(*) FROM ( SELECT HOUR(FROM_UNIXTIME(unix_timestamp)) as hour FROM access_logs WHERE date >= '2023-01-01' AND date <= '2023-01-31' ) subquery GROUP BY hour ORDER BY hour ASC; ``` 此脚本会返回指定日期范围内每小时收到的请求数量,从而帮助运维人员监控服务器负载变化趋势[^3]。 --- #### 场景三:ETL 处理流程 除了作为最终的数据展示层之外,Hive 还经常被用来完成 Extract-Transform-Load (ETL) 流程的一部分工作。比如当接收到原始交易记录之后,可能先要对其进行清洗转换后再存入目标数据库中去支持后续业务逻辑开发。下面是一个简单的例子说明怎样创建一张新并将外部 CSV 文件的内容导入进来: ```sql -- 创建目标定义 CREATE TABLE IF NOT EXISTS cleaned_transactions ( transaction_id STRING, customer_name STRING, product_category STRING, purchase_amount DOUBLE, timestamp BIGINT ); -- 加载来自本地磁盘路径下的 f.txt 数据源至临时外置 LOAD DATA LOCAL INPATH '/path/to/f.txt' INTO TABLE temp_table; -- 执行 ETL 转换逻辑后写回到正式的目标里头 INSERT INTO cleaned_transactions SELECT t.transaction_id, t.customer_name, CASE WHEN category='A' THEN 'Electronics' ELSE 'Other Goods' END, amount*exchange_rate, current_unix_time() FROM raw_input_table r JOIN exchange_rates e ON r.currency_code=e.code LEFT OUTER JOIN tax_adjustments a USING(account_number); ``` 以上片段演示了一个完整的端到端过程——从读取初始输入直到最后保存经过加工后的成果。 --- #### 总结 综上所述,Hive 不仅适用于传统的报生成功能,而且还能胜任诸如实时流式处理前预准备阶段的任务或者复杂模式匹配查找等工作负荷较重的情形下现优异。凭借灵活强大的语法特性加上背后依托的强大 MapReduce 计算框架支撑,使得它成为现代企业级解决方案不可或缺的一员大将^。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值