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 ORC

TBLPROPERTIES ("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_name
    private 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);

            // 创建Statement
            Statement 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);

            // 创建PreparedStatement
            String 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);

            // 创建Statement
            Statement 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);

            // 创建Statement
            Statement 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();
    }
}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Hive是一个基于Hadoop数据仓库工具,提供了类似于SQL的查询语言HiveQL,可以方便地进行数据分析和查询,适合大规模的数据处理。 在Hive的案例教程中,通常会包含一些习题,以帮助学习者更好地理解和掌握Hive的使用。这些习题可以涉及到不同的数据仓库场景和问题,下面是一个示例: 假设我们有一个电商平台的销售数据,其中包含了订单表和商品表。订单表包括了订单ID、用户ID、商品ID、购买数量和购买日期等信息;商品表包括了商品ID、商品名称、商品价格和商品分类等信息。 1. 统计每个用户的购买总金额,并按照金额从高到低排序。 可以通过使用Hive的聚合函数和排序功能来实现这个需求。首先,需要使用JOIN操作将订单表和商品表进行关联,根据商品ID找到对应的商品价格。然后,通过GROUP BY用户ID进行分组,使用SUM函数计算每个用户的购买总金额。最后,使用ORDER BY将结果按照金额从高到低排序。 2. 统计每个商品分类的销售数量和销售金额。 同样地,可以通过使用JOIN操作将订单表和商品表进行关联。然后,通过GROUP BY商品分类进行分组,分别使用COUNT和SUM函数计算每个商品分类的销售数量和销售金额。 3. 找出销售金额最高的前5个商品。 可以通过使用ORDER BY和LIMIT子句来实现这个需求。先通过JOIN操作将订单表和商品表进行关联,然后使用SUM函数计算每个商品的销售金额。最后,使用ORDER BY对销售金额进行降序排序,并使用LIMIT 5获取前5个商品。 通过完成这些习题,可以深入理解Hive数据仓库功能,掌握基本的数据查询和分析。同时,也能够提升对数据仓库设计和实践的理解和能力。 ### 回答2: Hive数据仓库案例教程习题是一种用于学习和实践Hive数据仓库的教育资源。它通过提供一系列的案例和习题,帮助学习者深入理解Hive数据仓库的概念与应用,并通过实践加深对Hive的掌握。 该教程习题通常包括以下内容: 1. 数据准备:习题提供了一些数据资料,学习者需要根据具体的案例要求将数据导入到Hive中。这一步通常涉及到创建、管理表格、上传数据等操作。 2. 数据分析:习题会提供一些具体的问题或需求,学习者需要通过Hive的查询语句进行数据分析。这一步要求学习者熟悉Hive的查询语法和常用函数,并能够编写出符合要求的查询语句。 3. 结果验证:学习者需要将自己查询得到的结果与提供的标准答案进行对比。这一步能够检验学习者对Hive查询的准确性和熟练程度。 通过完成这些案例教程习题,学习者可以逐步提升对Hive数据仓库的理解和实践能力。同时,这些习题也能够帮助学习者巩固理论知识,拓宽在实际应用场景中的思考和解决问题的能力。 总之,Hive数据仓库案例教程习题是一种有助于学习者掌握Hive数据仓库技术的教育资源,通过实践案例和习题,提升学习者的理论实践能力和问题解决能力。 ### 回答3: Hive数据仓库案例教程习题是为了帮助学习者更好地理解和掌握Hive数据仓库的相关知识和技能而设计的一系列练习题。 这些习题通常会根据实际的数据仓库案例进行设计,包括数据的导入和清洗、数据的转换和处理、数据的查询和分析等方面的内容。学习者可以通过完成这些习题,加深对Hive数据仓库的理解,并且提高自己在实际应用中的能力。 在这些习题中,学习者需要运用到Hive的相关操作语句和函数,例如创建和管理表、加载和导入数据、定义表结构和分区等。同时,学习者还需要了解Hive的查询语言,如SQL,以及Hive的高级功能,如UDF自定义函数等。通过这些习题,学习者可以从实际操作中不断提高和完善自己的技能。 总的来说,Hive数据仓库案例教程习题是一种亲身实践的学习方法,通过实际的案例和练习,帮助学习者更好地掌握和应用Hive数据仓库的技术,达到提升数据分析和处理能力的目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值