hive库操作示例

hive库操作示例

1、常规表

创建数据库

CREATE DATABASE mydatabase;

使用数据库

USE mydatabase;

创建表

CREATE TABLE mytable (id INT,name STRING,age INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

插入数据

INSERT INTO TABLE mytable VALUES (1, 'John', 25);
INSERT INTO TABLE mytable VALUES (2, 'Alice', 30);

插入报错

[42000][10797] COMPILE FAILED: Semantic error: [Error 10797] Only allow to single insert into Hyperbase/ES/Transaction Orc
单行插入同样报错,下述分区表、分桶表均存在相同报错;

正确插入示例

INSERT INTO TABLE mytable
SELECT * FROM(VALUES(1, 'John', 25),(2, 'Alice', 30)) AS (id, name,age)

查询数据

SELECT * FROM mytable;

更新数据

UPDATE mytable SET age = 26 WHERE id = 1;

删除数据

DELETE FROM mytable WHERE id = 2;

更新删除报错

COMPILE FAILED: Semantic error[40005]: Update/Delete/Merge operations cannot apply on views or non-transactional inceptor tables

更新/删除操作

创建临时表

创建新的空白表,用于存储更新后的数据。

CREATE TABLE newtable (id INT,name STRING,age INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
插入数据至临时表

使用INSERT OVERWRITE语句将更新后的数据插入到新表中。

INSERT OVERWRITE TABLE newtable
SELECT id, name, CASE WHEN id = 1 THEN 26 ELSE age END AS age
FROM mytable;
临时表重命名

如果需要,可以将新表重命名为原始表的名称。

ALTER TABLE newtable RENAME TO mytable;

删除表

DROP TABLE mytable;

2、分区表

创建分区表

首先,我们需要创建一个分区表。以下是一个创建分区表的示例:

CREATE TABLE my_table (col1 INT,col2 STRING
)
PARTITIONED BY (partition_col INT, partition_key STRING);

上述示例创建了一个名为 my_table 的表,它有两列 col1col2,并且定义了两个分区列 partition_colpartition_key

添加分区表数据

接下来,我们需要向分区表中添加数据。以下是向分区表添加数据的示例:

INSERT INTO TABLE my_table PARTITION (partition_col=1, partition_key='key1') VALUES (10, 'value1');
INSERT INTO TABLE my_table PARTITION (partition_col=2, partition_key='key2') VALUES (20, 'value2');

上述示例向 my_table 表的两个分区中插入了数据。

删除分区

如果你想删除分区,可以使用以下语法:

ALTER TABLE my_table DROP PARTITION (partition_col=1, partition_key='key1');

上述示例删除了 my_table 表中的一个特定分区。

查询分区表

要查询分区表,可以使用带有 WHERE 子句的 SELECT 语句来过滤特定的分区。例如:

SELECT * FROM my_table WHERE partition_col = 2;

上述示例将返回 my_table 表中 partition_col2 的所有数据。

关于更新、删除

如果你使用的是HyperbaseESTransaction Orc存储引擎,你将无法直接执行更新和删除操作。这些存储引擎主要用于高性能的数据写入,并且对数据的修改操作是受限的。

如果你需要更新或删除数据,你可能需要考虑使用其他类型的存储引擎,比如传统的关系型数据库(如MySQLPostgreSQL)或类似Hive的数据仓库。

分区表数据插入

正确插入示例

INSERT INTO TABLE my_table
PARTITION (partition_col=1, partition_key=‘key1’)
SELECT * FROM (VALUES (10, ‘value1’)) AS t (col1, col2);

3、分桶表

单从概念上理解分桶表可能会比较晦涩,其实和分区一样,分桶这个概念同样不是 Hive 独有的,对于 Java 开发人员而言,这可能是一个每天都会用到的概念,因为 Hive 中的分桶概念和 Java 数据结构中的 HashMap 的分桶概念是一致的。

方案一

创建分桶表
SET transaction.type=inceptor;CREATE TABLE student (name STRING,age INT)CLUSTERED BY (age)INTO 100 BUCKETS STORED AS ORCTBLPROPERTIES ("transactional"="true");
数据插入
INSERT INTO student(name,age) VALUES ('xiaoming', 12);

方案二

创建分桶表
CREATE TABLE student (name STRING,age INT)CLUSTERED BY (age)INTO 100 BUCKETS;
数据插入
INSERT INTO student
SELECT * FROM (VALUES ('xiaofang', 12)) AS t (col1, col2);
多条插入
INSERT INTO student
SELECT * FROM (VALUES ('xiaofang', 12),('xiaoguang', 13)) AS t (col1, col2);
分桶表数据删除

创建一个临时表,用于存储保留的分桶数据

CREATE TABLE temp_table AS SELECT * FROM my_bucketed_table WHERE bucket_id <> 12; 
-- 此处的 bucket_id  指代 `age`

删除原始的分桶表

DROP TABLE my_bucketed_table;

将临时表重命名为原始的分桶表

ALTER TABLE temp_table RENAME TO my_bucketed_table;

4、java客户端采用jdbc操作hive库

代码示例

package com.xxx.demo;import java.sql.*;public class HiveExample {// Hive连接信息private static final String HIVE_DRIVER = "org.apache.hive.jdbc.HiveDriver";private static final String HIVE_URL = "jdbc:hive2://localhost:10000/default"; // default -> your_database_nameprivate static final String HIVE_USER = "your_username";private static final String HIVE_PASSWORD = "your_password";// 查询示例public static void selectExample() {try {// 加载Hive驱动类Class.forName(HIVE_DRIVER);// 建立Hive连接Connection conn = DriverManager.getConnection(HIVE_URL, HIVE_USER, HIVE_PASSWORD);// 创建StatementStatement stmt = conn.createStatement();// 执行查询语句String sql = "SELECT * FROM your_table";ResultSet rs = stmt.executeQuery(sql);// 处理查询结果while (rs.next()) {// 根据列名获取字段值,例如:String column1Value = rs.getString("column1");int column2Value = rs.getInt("column2");// 其他字段依此类推System.out.println(column1Value + ", " + column2Value);}// 关闭连接和释放资源rs.close();stmt.close();conn.close();} catch (Exception e) {e.printStackTrace();}}// 插入示例public static void insertExample() {try {// 加载Hive驱动类Class.forName(HIVE_DRIVER);// 建立Hive连接Connection conn = DriverManager.getConnection(HIVE_URL, HIVE_USER, HIVE_PASSWORD);// 创建PreparedStatementString sql = "INSERT INTO your_table SELECT * FROM (VALUES" + " (?, ?))";PreparedStatement pstmt = conn.prepareStatement(sql);// 设置参数pstmt.setString(1, "value1");pstmt.setInt(2, 123);// 其他参数依此类推// 执行插入操作pstmt.executeUpdate();// 关闭连接和释放资源pstmt.close();conn.close();} catch (Exception e) {e.printStackTrace();}}// 更新示例public static void updateExample() {try {// 加载Hive驱动类Class.forName(HIVE_DRIVER);// 建立Hive连接Connection conn = DriverManager.getConnection(HIVE_URL, HIVE_USER, HIVE_PASSWORD);// 创建StatementStatement stmt = conn.createStatement();// 执行更新语句String sql = "UPDATE your_table SET column1 = 'new_value' WHERE condition";int rowsAffected = stmt.executeUpdate(sql);System.out.println("Rows affected: " + rowsAffected);// 关闭连接和释放资源stmt.close();conn.close();} catch (Exception e) {e.printStackTrace();}}// 删除示例public static void deleteExample() {try {// 加载Hive驱动类Class.forName(HIVE_DRIVER);// 建立Hive连接Connection conn = DriverManager.getConnection(HIVE_URL, HIVE_USER, HIVE_PASSWORD);// 创建StatementStatement stmt = conn.createStatement();// 执行删除语句String sql = "DELETE FROM your_table WHERE condition";int rowsAffected = stmt.executeUpdate(sql);System.out.println("Rows affected: " + rowsAffected);// 关闭连接和释放资源stmt.close();conn.close();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {selectExample();insertExample();updateExample();deleteExample();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/10065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(七)「消息队列」之 RabbitMQ 发布者确认(使用 .NET 客户端)

发布者确认&#xff08;Publisher Confirms&#xff09; 发布者确认是一个 RabbitMQ 扩展&#xff0c;用于实现可靠的发布。当在通道上启用发布者确认时&#xff0c;客户端发布的消息将由代理异步确认&#xff0c;这意味着它们已在服务器端得到处理。 0、引言 先决条件 本教程…

C#中使用LINQ和lambda实现左链接、右链接、内链接

C#中使用LINQ和lambda实现左链接、右链接、内链接 在 C# 中使用 LINQ 和 lambda 表达式可以实现左链接&#xff08;Left Join&#xff09;、右链接&#xff08;Right Join&#xff09;和内链接&#xff08;Inner Join&#xff09;操作。这些链接操作是针对两个数据集合之间的关…

在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试

介绍 在命令行模式下执行Java程序&#xff0c;如果输入中文&#xff0c;经常会出现和代码中的解码字符集不匹配的情况&#xff0c;导致结果不正确。 在命令行模式下执行Java程序&#xff0c;输入中文&#xff0c;其实是用某种字符集编码成字节流&#xff0c;Java程序读取该字节…

Seaborn库绘制单变量分布和双变量分布

Matplotlib虽然已经是比较优秀的绘图库了&#xff0c;但是它有个今人头疼的问题&#xff0c;那就是API使用过于复杂&#xff0c;它里面有上千个函数和参数&#xff0c;属于典型的那种可以用它做任何事&#xff0c;却无从下手。 Seaborn基于 Matplotlib核心库进行了更高级的API…

python与深度学习(五):CNN和手写数字识别

目录 1. 说明2. 卷积运算3. 填充4. 池化5. 卷积神经网络实战-手写数字识别的CNN模型5.1 导入相关库5.2 加载数据5.3 数据预处理5.4 数据处理5.5 构建网络模型5.6 模型编译5.7 模型训练、保存和评价5.8 模型测试5.9 模型训练结果的可视化 6. 手写数字识别的CNN模型可视化结果图7…

LeetCode面向运气之Javascript—第2600题-K件物品的最大和-94.68%

LeetCode第2600题-K件物品的最大和 题目要求 袋子中装有一些物品&#xff0c;每个物品上都标记着数字 1 、0 或 -1 。 四个非负整数 numOnes 、numZeros 、numNegOnes 和 k 。 袋子最初包含&#xff1a; numOnes 件标记为 1 的物品。numZeroes 件标记为 0 的物品。numNegOn…

12 扩展Spring MVC

✔ 12.1 实现页面跳转功能 页面跳转功能&#xff1a;访问localhost:8081/jiang会自动跳转到另一个页面。 首先&#xff0c;在config包下创建一个名为MyMvcConfig的配置类&#xff1a; 类上加入Configuration注解&#xff0c;类实现WebMvcConfiger接口&#xff0c;实现里面的视…

Tomcat中的缓存配置

Tomcat中的缓存配置通常是通过Web应用程序的context.xml文件或Tomcat的server.xml文件进行设置。下面提供一个简单的案例来说明如何在Tomcat中配置缓存。 假设您的Web应用程序名为"myapp"&#xff0c;我们将在context.xml中添加缓存配置。 打开Tomcat安装目录&…

【学习心得】sublime text 4 自定义编译系统

一、问题描述 在电脑中有多个版本的Python解释器&#xff0c;而sublime默认选择最新版本的解释器&#xff0c;如何指定自己想要的解释器呢&#xff1f; 二、自定义编译系统 1、选择新建编译系统&#xff08;如图&#xff09; 2、重写两个键值对&#xff08;只修改中文部分其…

升级你的数据采集引擎 使用多线程与代理池提升HTTP代理爬虫性能

在信息爆炸的时代&#xff0c;海量数据的采集和分析成为了企业发展和决策的关键。本文将分享如何通过多线程和代理池的应用&#xff0c;助您升级数据采集引擎&#xff0c;提高数据获取效率和稳定性。 HTTP代理爬虫作为数据采集的重要工具&#xff0c;其性能直接影响着数据采集…

【Hive 01】简介、安装部署、高级函数使用

1 Hive简介 1.1 Hive系统架构 Hive是建立在 Hadoop上的数据仓库基础构架&#xff0c;它提供了一系列的工具&#xff0c;可以进行数据提取、转化、加载&#xff08; ETL &#xff09;Hive定义了简单的类SQL查询语言&#xff0c;称为HQL&#xff0c;它允许熟悉SQL的用户直接查询…

待学习列表

列表 梦是人生番外篇 语雀 语言 区块链 TS 微信小程序 前端 Java Python C

【《机器学习和深度学习:原理、算法、实战(使用Python和TensorFlow)》——以机器学习理论为基础并包含其在工业界的实践的一本书】

机器学习和深度学习已经成为从业人员在人工智能时代必备的技术&#xff0c;被广泛应用于图像识别、自然语言理解、推荐系统、语音识别等多个领域&#xff0c;并取得了丰硕的成果。目前&#xff0c;很多高校的人工智能、软件工程、计算机应用等专业均已开设了机器学习和深度学习…

AVFoundation - 视频过渡

文章目录 一、简要说明二、使用一、简要说明 相关类 AVMutableVideoCompositionAVMutableVideoCompositionInstruction 视频操作指令 AVMutableVideoCompositionLayerInstruction二、使用 - (void)testCom5 {// Compositionを生成AVMutableComposition *mutableComposition =…

OBS 迁移--华为云

一、创建迁移i任务 1. 登录管理控制台。 2. 单击管理控制台左上角的 在下拉框中选择区域。 3. 单击“ 服务列表 ”&#xff0c;选择“ 迁移 > 对象存储迁移服务 OMS ”&#xff0c;进入“ 对象存储迁移服务 ”页面。 4. 单击页面右上角“ 创建迁移任务 ”。 5. 仔细阅读…

el-upload上传图片和视频,支持预览和删除

话不多说&#xff0c; 直接上代码&#xff1a; 视图层&#xff1a; <div class"contentDetail"><div class"contentItem"><div style"margin-top:5px;" class"label csAttachment">客服上传图片:</div><el…

iOS--KVO和KVC

KVC 简单介绍 KVC的全称是KeyValueCoding&#xff0c;俗称“键值编码”&#xff0c;可以通过一个key来访问某个属性&#xff1b; KVC提供了一种间接访问其属性方法或成员变量的机制&#xff0c;可以通过字符串来访问对应的属性方法或成员变量&#xff1b; 它是一个非正式的…

大数据课程C4——ZooKeeper结构运行机制

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解Zookeeper的特点和节点信息&#xff1b; ⚪ 掌握Zookeeper的完全分布式安装 ⚪ 掌握Zookeeper的选举机制、ZAB协议、AVRO&#xff1b; 一、Zookeeper-简介 1. 特点…

js中reduce方法的常用应用场景

reduce() 方法可以用来迭代数组并且执行一个回调函数&#xff0c;将数组中的元素聚合成一个单独的值。它可以被用于一系列的操作&#xff0c;如累加求和&#xff0c;计算平均值和查找最大值或最小值等。以下是reduce() 方法的几个应用场景和相应的示例&#xff1a; 求和或求积…

vue build 打包遇到bug解决记录

文章目录 vue-cli-service servevue打包修改dist文件夹名字vue build require is not defined 和 exports is not defind 错误 vue-cli-service serve 通常vue是不能直接使用vue-cli-service命令在终端运行的&#xff0c;所以才会在package.json中配置了scripts&#xff1a; …