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

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.lryc.cn/news/96275.html

相关文章:

  • LeetCode第 N 个泰波那契数 (认识动态规划)
  • 线程安全问题(内存可见性)
  • STM32MX配置EEPROM(AT24C02)------保姆级教程
  • 微信小程序 样式和全局配置
  • 一.初识C语言
  • filebeat到kafka示例
  • AlmaLinux系统下的Zabbix汉化
  • 【网络编程】(TCP流套接字编程 ServerSocket API Socket API 手写TCP版本的回显服务器 TCP中的长短连接)
  • 企业级PaaS低代码快开平台源码,基于 Salesforce Platform 的开源替代方案
  • 【LeetCode】72.编辑距离
  • 大模型,开源干不掉闭源
  • Redis 九种数据类型的基本操作
  • 爬取微博热搜榜并进行数据分析
  • 基于深度神经网络的肺炎检测系统实现
  • C# LINQ和Lambda表达式对照
  • 二、SQL-6.DCL-1).用户管理
  • ElasticSearch学习--数据聚合
  • PostMan+Jmeter工具介绍及安装
  • AutoSAR系列讲解(实践篇)7.4-实验:配置SWCRTE
  • 腾讯云内存型CVM服务器MA3、M6、M6ce和M5处理器CPU说明
  • 集睿致远推出CS5466多功能拓展坞方案:支持DP1.4、HDMI2.1视频8K输出
  • SQL中为何时常见到 where 1=1?
  • React AntDesign表批量操作时的selectedRowKeys回显选中
  • anydesk远程控制,主动连接。
  • Spring Data Redis操作Redis
  • sqlite触发器1
  • python中——requests爬虫【中文乱码】的3种解决方法
  • E. Nastya and Potions(DFS+记忆化搜索)
  • 什么是tcp rst以及什么时候产生?
  • Visual Studio Code配置免密远程开发环境