
Apache Hive 是一个基于 Hadoop 的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运行。本文将对常用的 Hive 操作语句进行整理,帮助初学者快速掌握 Hive 的基本使用方法。
在 Hive 中,可以通过以下命令创建数据库:
CREATE DATABASE IF NOT EXISTS database_name
[COMMENT 'database_comment']
[LOCATION 'hdfs_path']
[WITH DBPROPERTIES (property_name=property_value, ...)];IF NOT EXISTS:如果数据库已存在,则不会执行创建操作。COMMENT:给数据库添加注释。LOCATION:指定数据库在 HDFS 上的存储位置。WITH DBPROPERTIES:给数据库添加属性。
删除数据库的命令如下:
DROP DATABASE [IF EXISTS] database_name [CASCADE | RESTRICT];IF EXISTS:如果数据库不存在,则不会抛出错误。CASCADE:级联删除,即删除数据库及其所有表。RESTRICT(默认):如果数据库中有表,则不允许删除数据库。创建表的基本语法如下:
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)];EXTERNAL:创建外部表,删除表时不会删除数据。PARTITIONED BY:分区表,用于提高查询效率。CLUSTERED BY:桶表,用于进一步优化查询性能。ROW FORMAT:指定行格式。STORED AS:指定存储格式。LOCATION:指定表在 HDFS 上的存储位置。TBLPROPERTIES:给表添加属性。删除表的命令如下:
DROP TABLE [IF EXISTS] table_name;IF EXISTS:如果表不存在,则不会抛出错误。加载数据到表中的命令如下:
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE table_name [PARTITION (partcol1=val1, partcol2=val2,...)];LOCAL:从本地文件系统加载数据。OVERWRITE:覆盖表中已有的数据。PARTITION:指定分区信息。查询数据的基本语法如下:
SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE boolean_expression]
[GROUP BY col_list]
[HAVING boolean_expression]
[ORDER BY col_list [ASC | DESC]]
[LIMIT number];ALL(默认):返回所有匹配的行。DISTINCT:返回唯一不同的行。WHERE:指定查询条件。GROUP BY:按指定列分组。HAVING:对分组后的结果进行过滤。ORDER BY:按指定列排序。LIMIT:限制返回的行数。
插入数据到表中的命令如下:
INSERT INTO TABLE table_name [PARTITION (partcol1=val1, partcol2=val2,...)]
VALUES (value1, value2, ...), (value1, value2, ...), ...;PARTITION:指定分区信息。修改表结构的命令如下:
ALTER TABLE table_name ADD COLUMNS (col_name data_type [COMMENT col_comment], ...);
ALTER TABLE table_name RENAME TO new_table_name;
ALTER TABLE table_name ADD PARTITION (partcol1=val1, partcol2=val2,...) LOCATION 'hdfs_path';
ALTER TABLE table_name DROP PARTITION (partcol1=val1, partcol2=val2,...);ADD COLUMNS:添加新列。RENAME TO:重命名表。ADD PARTITION:添加分区。DROP PARTITION:删除分区。
查看表信息的命令如下:
DESCRIBE [EXTENDED|FORMATTED] table_name;
SHOW CREATE TABLE table_name;DESCRIBE:显示表的列信息。SHOW CREATE TABLE:显示创建表的 SQL 语句。将查询结果导出到文件的命令如下:
INSERT OVERWRITE DIRECTORY 'hdfs_path'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
SELECT * FROM table_name;DIRECTORY:指定导出的目录。ROW FORMAT DELIMITED:指定行格式。Apache Hive 是一个基于 Hadoop 的数据仓库工具,用于处理大规模数据集。下面是一些常见的 Hive 操作语句及其在实际场景中的应用示例。
在开始任何数据操作之前,通常需要创建一个数据库来组织表和数据。
CREATE DATABASE IF NOT EXISTS sales;选择要操作的数据库。
USE sales;创建一个表来存储销售数据。
CREATE TABLE IF NOT EXISTS sales_data (
sale_id INT,
product_id INT,
customer_id INT,
sale_date DATE,
quantity INT,
price DECIMAL(10, 2)
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;将外部数据文件加载到表中。

LOAD DATA INPATH '/user/hadoop/sales_data.csv' INTO TABLE sales_data;查询表中的数据。
SELECT * FROM sales_data LIMIT 10;根据条件过滤数据。
SELECT * FROM sales_data WHERE sale_date BETWEEN '2023-01-01' AND '2023-12-31';对数据进行分组并计算总销售额。

SELECT product_id, SUM(quantity * price) AS total_sales
FROM sales_data
GROUP BY product_id
ORDER BY total_sales DESC;假设有一个产品表 products,包含 product_id 和 product_name,我们可以将两个表连接起来。
CREATE TABLE IF NOT EXISTS products (
product_id INT,
product_name STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
-- 加载产品数据
LOAD DATA INPATH '/user/hadoop/products.csv' INTO TABLE products;
-- 连接表并查询
SELECT p.product_name, s.total_sales
FROM (
SELECT product_id, SUM(quantity * price) AS total_sales
FROM sales_data
GROUP BY product_id
) s
JOIN products p ON s.product_id = p.product_id
ORDER BY s.total_sales DESC;向表中插入新数据。
INSERT INTO sales_data (sale_id, product_id, customer_id, sale_date, quantity, price)
VALUES (1001, 2001, 3001, '2023-01-01', 5, 100.00);更新表中的数据(Hive 不支持直接更新,但可以通过插入新数据来实现)。
INSERT OVERWRITE TABLE sales_data
SELECT sale_id, product_id, customer_id, sale_date,
CASE WHEN sale_id = 1001 THEN 10 ELSE quantity END AS quantity,
price
FROM sales_data;删除表中的数据(Hive 不支持直接删除,但可以通过插入新数据来实现)。
INSERT OVERWRITE TABLE sales_data
SELECT sale_id, product_id, customer_id, sale_date, quantity, price
FROM sales_data
WHERE sale_id != 1001;删除不再需要的表。
DROP TABLE IF EXISTS sales_data;Apache Hive 是一个基于 Hadoop 的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,可以将 SQL 语句转换为 MapReduce 任务进行运行。下面是一些常用的 Hive 操作语句的整理和解释:
CREATE DATABASE db_name;db_name。USE db_name;db_name。CREATE TABLE table_name (
column1 datatype,
column2 datatype,
...
) STORED AS file_format;table_name,并指定列名和数据类型,以及存储格式(如 TEXTFILE, ORC, PARQUET 等)。CREATE EXTERNAL TABLE table_name (
column1 datatype,
column2 datatype,
...
) LOCATION 'hdfs_path';table_name,并指定列名和数据类型,以及数据在 HDFS 上的位置。LOAD DATA LOCAL INPATH 'local_path' INTO TABLE table_name;table_name 中。LOAD DATA INPATH 'hdfs_path' INTO TABLE table_name;table_name 中。INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);table_name 中插入一行数据。INSERT INTO table_name (column1, column2, ...)
VALUES (value1_1, value1_2, ...),
(value2_1, value2_2, ...);table_name 中插入多行数据。INSERT INTO table_name SELECT * FROM source_table WHERE condition;source_table 中满足条件的数据插入到 table_name 中。SELECT column1, column2, ... FROM table_name WHERE condition;table_name 中查询满足条件的数据。Hive 不支持直接更新数据,但可以通过以下方式实现类似的效果:
INSERT OVERWRITE TABLE table_name
SELECT column1, column2, ...
FROM table_name
WHERE condition;INSERT OVERWRITE 语句覆盖表中的数据。Hive 不支持直接删除数据,但可以通过以下方式实现类似的效果:
INSERT OVERWRITE TABLE table_name
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;INSERT OVERWRITE 语句过滤掉不需要的数据。DROP TABLE [IF EXISTS] table_name;table_name。如果表不存在且使用了 IF EXISTS,则不会报错。SHOW TABLES;DESCRIBE table_name;table_name 的结构信息。CREATE TABLE table_name (
column1 datatype,
column2 datatype,
...
)
PARTITIONED BY (partition_column datatype)
STORED AS file_format;table_name,并指定分区列 partition_column 和存储格式。ALTER TABLE table_name ADD PARTITION (partition_column='value');table_name 添加一个新的分区。ALTER TABLE table_name DROP PARTITION (partition_column='value');table_name 中的一个分区。CREATE TABLE table_name (
column1 datatype,
column2 datatype,
...
)
CLUSTERED BY (bucket_column) INTO num_buckets BUCKETS
STORED AS file_format;table_name,并指定桶列 bucket_column 和桶的数量 num_buckets。CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition;view_name,视图是基于查询结果的虚拟表。DROP VIEW [IF EXISTS] view_name;view_name。这些是 Hive 中常用的一些操作语句。希望这些内容对你有帮助!如果你有任何具体的问题或需要进一步的解释,请随时告诉我。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。