第一章 hive入门
Apache Hive 是一个基于 Hadoop 的数据仓库工具,用于存储和管理大数据。Hive 的特点是提供了类似于 SQL 的查询语言(HiveQL),使得熟悉 SQL 的用户可以轻松地查询和分析数据。Hive 适用于批处理作业,而非实时、交互式查询。以下是 Hive 的一些基础知识:
1. 安装和配置:Hive 可以安装在 Hadoop 集群上,需要配置 Hive 的配置文件(hive-site.xml),并确保 Hadoop 集群正常运行。
2. Hive 数据库和表:Hive 使用数据库和表的概念来组织数据。创建数据库和表的 HiveQL 语句与 SQL 相似。
CREATE DATABASE IF NOT EXISTS mydatabase;
USE mydatabase;
CREATE TABLE IF NOT EXISTS mytable (
col1 INT,
col2 STRING,
col3 DOUBLE
);
3. Hive 数据类型:Hive 支持许多数据类型,例如整数(INT)、字符串(STRING)、浮点数(DOUBLE)、日期(DATE)等。
4. HiveQL 查询:HiveQL 是 Hive 的查询语言,与 SQL 非常相似。可以使用 HiveQL 查询数据、分组统计、连接表等。
SELECT col1, SUM(col2) FROM mytable GROUP BY col1;
5. Hive 函数:Hive 提供了许多内置函数,如数学函数、字符串函数、日期函数等。用户可以使用这些函数在处理数据时执行各种操作。
6. Hive 分区与桶:Hive 支持分区和桶,以优化查询性能。分区是将数据按照某个列的值划分为不同的目录,桶是将数据按照某个列的哈希值划分为不同的文件。
7. Hive 索引:Hive 支持索引,可以显著提高查询性能。Hive 索引分为紧凑索引和位图索引。
8. Hive 优化:了解数据分布、选择合适的文件格式、使用分区和桶、创建索引等方法可以优化 Hive 查询性能。
第二章 Hive数据库及表操作
Hive 数据库和表的操作主要包括创建、修改、删除等。以下是一些基本的操作:
1. 创建数据库:
CREATE DATABASE IF NOT EXISTS mydatabase;
2. 显示数据库:
SHOW DATABASES;
3. 设置当前数据库:
USE mydatabase;
4. 创建表:
CREATE TABLE IF NOT EXISTS mytable (
col1 INT,
col2 STRING,
col3 DOUBLE
);
5. 显示表:
SHOW TABLES;
6. 显示表结构:
DESCRIBE mytable;
7. 插入数据:
INSERT INTO mytable VALUES (1, 'a', 3.5);
8. 查询数据:
SELECT * FROM mytable;
9. 更新数据:
UPDATE mytable SET col1 = 2 WHERE col2 = 'a';
10. 删除数据:
DELETE FROM mytable WHERE col2 = 'a';
11. 删除表:
DROP TABLE mytable;
12. 删除数据库:
DROP DATABASE mydatabase;
13. 修改表结构:
ALTER TABLE mytable ADD COLUMNS (col4 INT);
14. 重命名表:
ALTER TABLE mytable RENAME TO newtable;
以上就是hive数据库及表的基本操作,这些操作可以在 Hive 命令行界面或任何支持 HiveQL 的工具中进行。
第三章 hive元数据
Hive 元数据是指 Hive 中用于描述数据结构的信息。元数据存储在 Hive 的 Metastore 中,它包括表名、列名、列类型、分区信息、表关联关系等信息。Hive 使用 Metastore 来保存和访问元数据,使得 Hive 能够高效地执行查询和数据管理操作。
Metastore 主要包括以下类型的元数据:
1. 表元数据:包括表名、表类型(内部表或外部表)、表所属的数据库、表的创建时间等信息。
2. 列元数据:包括列名、列类型、列注释等信息。
3. 分区元数据:包括分区列名、分区值等信息。
4. 索引元数据:包括索引名、索引列名、索引表等信息。
5. 视图元数据:包括视图名、视图查询语句等信息。
6. 存储信息:包括存储格式(TEXTFILE、SEQUENCEFILE、RCFILE 等)、压缩格式(NONE、SNAPPY、GZIP 等)等信息。
7. 权限信息:包括表级权限、列级权限等信息。
Hive 提供了一些命令来查看元数据,例如:
DESCRIBE DATABASE extensive_db;
DESCRIBE TABLE extensive_table;
DESCRIBE FORMATTED extensive_table;
这些命令可以用来查看数据库的详细信息、表的详细信息以及表的格式化详细信息。此外,还可以使用 Hive 元数据服务(Hive Metastore Service,HMS)的 Thrift 接口来获取元数据信息。
第四章 hive高级操作
Hive 高级操作包括 Partition(分区)、 Bucket(分桶)、索引、自定义函数、UDF(用户定义函数)、窗口函数等。这些高级操作可以更有效地查询和处理数据。
1. 分区(Partition):分区是将表或分区列的值划分为不同的目录,以优化查询性能。创建分区表时,可以在 CREATE TABLE 语句中使用 PARTITIONED BY 子句来指定分区列。例如:
CREATE TABLE sales (
sale_date DATE,
sale_amount DOUBLE
) PARTITIONED BY (sale_region STRING);
2. 分桶(Bucket):分桶是将数据按照某个列的哈希值划分为不同的文件。创建分桶表时,可以在 CREATE TABLE 语句中使用 CLUSTERED BY 子句来指定分桶列。例如:
CREATE TABLE sales (
sale_date DATE,
sale_amount DOUBLE
) CLUSTERED BY (sale_date) INTO 12 BUCKETS;
3. 索引:Hive 从 0.7.0 版本开始支持索引。索引可以显著提高查询性能,尤其是在大型表中。可以在 CREATE TABLE 语句中使用 INDEX 子句来创建索引。例如:
CREATE TABLE sales (
sale_date DATE,
sale_amount DOUBLE
) PARTITIONED BY (sale_region STRING)
INDEX (sale_date)
CLUSTERED BY (sale_date) INTO 12 BUCKETS;
4. 自定义函数(UDF):用户定义函数(UDF)是一种用来扩展 Hive 查询功能的方法。UDF 可以在 Hive 查询中使用,类似于内置函数。要使用 UDF,需要先在 Hive 会话中注册 UDF,然后可以在 SELECT、WHERE 等子句中使用。例如:
ADD JAR /path/to/your/udf.jar;
CREATE TEMPORARY FUNCTION your_udf AS 'com.example.YourUDF';
SELECT your_udf(column1) FROM your_table;
5. 窗口函数:窗口函数是一种用于处理排好序的数据集的函数。窗口函数可以在 OVER() 子句中使用,根据给定的框架对行数据进行计算。例如:
SELECT sale_date, sale_amount, SUM(sale_amount) OVER (ORDER BY sale_date) AS moving_sum
FROM sales;
熟练使用这些高级操作可以使 Hive 查询更高效、更强大。
第五章 hive函数与streaming
在 Hive 中,函数是一种用于转换和处理数据的方法。Hive 提供了许多内置函数,如数学函数、字符串函数、日期函数等。用户可以使用这些函数在查询中操作数据。此外,用户还可以创建自己的函数,称为用户定义函数。
流(Streaming)是 Hive 中处理数据的另一种方式。流处理是指在数据不断到达时对其进行处理,而不是等待所有数据都到达后再进行处理。Hive 支持使用 Streaming 功能处理实时数据。在 Streaming 中,数据可以通过不同的数据源(如 Kafka、Flume 等)实时传入hive,然后使用 Hive 查询处理这些数据。
以下是一些 Hive 函数和 Streaming 的示例:
1. Hive 函数:
假设我们有一个销售记录表 `sales`,表中包含 `sale_date`(销售日期)和 `sale_amount`(销售金额)两列。我们希望计算每月的总销售额。可以使用 `SUM()` 和 `GROUP BY` 函数来实现:
SELECT sale_date, SUM(sale_amount) as total_sales
FROM sales
GROUP BY sale_date;
2. Hive Streaming:
要实现 Streaming,我们需要配置一个数据源并将数据流入 Hive。在这里,我们使用 Kafka 作为数据源。首先,确保已经安装了 Kafka 和 Hive 并配置了相应的连接器。接下来,创建一个 Kafka 主题(topic),并编写一个生产者程序将数据发送到该主题。最后,在 Hive 中创建一个流式表来读取 Kafka 数据:
CREATE STREAM sales_stream (sale_date STRING, sale_amount DOUBLE)
STORED AS KAFKA
LOCATION 'kafka://localhost:9092/topic1'
TBLPROPERTIES ('kafka.bootstrap.servers'='localhost:9092');
现在,每当新的销售记录到达 Kafka 主题时,Hive 流式表 `sales_stream` 将自动更新。可以使用 `SELECT` 语句查询流式表中的数据:
SELECT sale_date, SUM(sale_amount) as total_sales
FROM sales_stream
GROUP BY sale_date;
通过结合使用 Hive 函数和 Streaming 功能,用户可以实时地处理和转换数据。
第六章 hive视图与索引
1. 视图(Views):
在 Hive 中,视图是一种虚拟表,它不包含实际的数据,而是以一种可读的、有意义的方式呈现一组查询结果。视图可以使复杂的查询更容易理解和使用。创建视图后,可以在后续的查询中当作普通表一样使用。
创建视图的语法:
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
使用视图进行查询:
SELECT * FROM view_name;
请注意,视图在创建时并不会实际执行查询,而是在每次使用视图时才会执行查询。此外,视图是不可更新的,因此无法通过视图对基础表数据进行修改。
2. 索引(Indexes):
Hive 从 0.7.0 版本开始支持索引。索引是一种提高查询性能的方法,尤其是在大型表中。索引有助于减少需要扫描的数据量,从而提高查询速度。
Hive 索引可以分为两类:紧凑索引和位图索引。紧凑索引适用于值分布比较集中的列,而位图索引适用于值分布比较分散的列。
创建索引的语法:
CREATE INDEX index_name
ON TABLE table_name (column_name)
AS 'index_type';
其中,`index_type` 可以是 `COMPACT`(紧凑索引)或 `BITMAP`(位图索引)。
例如,创建一个紧凑索引:
CREATE INDEX sale_date_index
ON TABLE sales (sale_date)
AS 'COMPACT';
索引创建后,Hive 将在查询执行过程中自动使用索引。需要注意的是,索引可能会增加存储需求和维护成本,因此在实际应用中需要权衡使用索引的利弊。
总之,视图和索引都可以在不同层面上优化 Hive 查询。视图有助于简化和组织查询,而索引可以提高查询性能。合理地使用视图和索引,可以使 Hive 查询更加高效。