0


hive库操作示例

hive库操作示例

1、常规表

创建数据库
CREATEDATABASE mydatabase;
使用数据库
USE mydatabase;
创建表
CREATETABLE mytable (
  id INT,
  name STRING,
  age INT)ROW FORMAT DELIMITED
FIELDSTERMINATEDBY','
STORED AS TEXTFILE;
插入数据
INSERTINTOTABLE mytable VALUES(1,'John',25);INSERTINTOTABLE mytable VALUES(2,'Alice',30);
插入报错

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

正确插入示例
INSERTINTOTABLE mytable
SELECT*FROM(VALUES(1,'John',25),(2,'Alice',30))AS(id, name,age)
查询数据
SELECT*FROM mytable;
更新数据
UPDATE mytable SET age =26WHERE id =1;
删除数据
DELETEFROM mytable WHERE id =2;
更新删除报错

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

更新/删除操作
创建临时表

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

CREATETABLE newtable (
  id INT,
  name STRING,
  age INT)ROW FORMAT DELIMITED
FIELDSTERMINATEDBY','
STORED AS TEXTFILE;
插入数据至临时表

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

INSERT OVERWRITE TABLE newtable
SELECT id, name,CASEWHEN id =1THEN26ELSE age ENDAS age
FROM mytable;
临时表重命名

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

ALTERTABLE newtable RENAMETO mytable;
删除表
DROPTABLE mytable;

2、分区表

创建分区表

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

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

上述示例创建了一个名为

my_table

的表,它有两列

col1

col2

,并且定义了两个分区列

partition_col

partition_key

添加分区表数据

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

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

上述示例向

my_table

表的两个分区中插入了数据。

删除分区

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

ALTERTABLE my_table DROPPARTITION(partition_col=1, partition_key='key1');

上述示例删除了

my_table

表中的一个特定分区。

查询分区表

要查询分区表,可以使用带有

WHERE

子句的

SELECT

语句来过滤特定的分区。例如:

SELECT*FROM my_table WHERE partition_col =2;

上述示例将返回

my_table

表中

partition_col

2

的所有数据。

关于更新、删除

如果你使用的是

Hyperbase

ES

Transaction Orc

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

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

MySQL

PostgreSQL

)或类似

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

的分桶概念是一致的。

方案一
创建分桶表
SETtransaction.type=inceptor;CREATETABLE student (name STRING,age INT)CLUSTEREDBY(age)INTO100 BUCKETS STORED AS ORC

TBLPROPERTIES ("transactional"="true");
数据插入
INSERTINTO student(name,age)VALUES('xiaoming',12);
方案二
创建分桶表
CREATETABLE student (name STRING,age INT)CLUSTEREDBY(age)INTO100 BUCKETS;
数据插入
INSERTINTO student
SELECT*FROM(VALUES('xiaofang',12))AS t (col1, col2);
多条插入
INSERTINTO student
SELECT*FROM(VALUES('xiaofang',12),('xiaoguang',13))AS t (col1, col2);
分桶表数据删除

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

CREATETABLE temp_table ASSELECT*FROM my_bucketed_table WHERE bucket_id <>12;-- 此处的 bucket_id  指代 `age`

删除原始的分桶表

DROPTABLE my_bucketed_table;

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

ALTERTABLE temp_table RENAMETO my_bucketed_table;

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

代码示例
packagecom.xxx.demo;importjava.sql.*;publicclassHiveExample{// Hive连接信息privatestaticfinalStringHIVE_DRIVER="org.apache.hive.jdbc.HiveDriver";privatestaticfinalStringHIVE_URL="jdbc:hive2://localhost:10000/default";// default -> your_database_nameprivatestaticfinalStringHIVE_USER="your_username";privatestaticfinalStringHIVE_PASSWORD="your_password";// 查询示例publicstaticvoidselectExample(){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();}}// 插入示例publicstaticvoidinsertExample(){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();}}// 更新示例publicstaticvoidupdateExample(){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();}}// 删除示例publicstaticvoiddeleteExample(){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();}}publicstaticvoidmain(String[] args){selectExample();insertExample();updateExample();deleteExample();}}

本文转载自: https://blog.csdn.net/shang_xs/article/details/131932847
版权归原作者 shang_xs 所有, 如有侵权,请联系我们删除。

“hive库操作示例”的评论:

还没有评论