Hive常用命令参考

一、数据库操作

1. 创建数据库

sql

CREATE DATABASE [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];

示例:创建名为test_db的数据库

sql

CREATE DATABASE IF NOT EXISTS test_db 
COMMENT 'This is a test database'
LOCATION '/user/hive/databases/test_db'
WITH DBPROPERTIES ('creator'='admin', 'date'='2023-01-01');

2. 查看数据库

sql

SHOW DATABASES;
SHOW DATABASES LIKE 'hive_*'; -- 模糊查询

3. 切换数据库

sql

USE database_name;

4. 查看数据库详情

sql

DESCRIBE DATABASE [EXTENDED] database_name;

5. 删除数据库

sql

DROP DATABASE [IF EXISTS] database_name [CASCADE]; -- CASCADE表示级联删除表

二、表操作

1. 创建内部表

sql

CREATE TABLE [IF NOT EXISTS] table_name (
  column_name data_type [COMMENT column_comment],
  ...
)
[COMMENT table_comment]
[ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
 LINES TERMINATED BY '\n']
[STORED AS TEXTFILE]
[LOCATION hdfs_path];

示例:创建员工表

sql

CREATE TABLE IF NOT EXISTS employees (
  id INT COMMENT 'Employee ID',
  name STRING COMMENT 'Employee Name',
  salary FLOAT COMMENT 'Employee Salary'
)
COMMENT 'Employee Information Table'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

2. 创建外部表

sql

CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name (
  column_name data_type [COMMENT column_comment],
  ...
)
[COMMENT table_comment]
[ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
 LINES TERMINATED BY '\n']
[STORED AS TEXTFILE]
LOCATION hdfs_path;

3. 创建分区表

sql

CREATE TABLE [IF NOT EXISTS] table_name (
  column_name data_type [COMMENT column_comment],
  ...
)
PARTITIONED BY (partition_column data_type)
[ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
 LINES TERMINATED BY '\n'];

示例:按日期分区的日志表

sql

CREATE TABLE IF NOT EXISTS logs (
  id INT,
  content STRING
)
PARTITIONED BY (log_date STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

4. 查看表列表

sql

SHOW TABLES;
SHOW TABLES LIKE 'emp_*'; -- 模糊查询

5. 查看表结构

sql

DESCRIBE [EXTENDED] table_name; -- EXTENDED显示详细信息

6. 修改表名

sql

ALTER TABLE old_table_name RENAME TO new_table_name;

7. 删除表

sql

DROP TABLE [IF EXISTS] table_name; -- 内部表数据会被删除,外部表仅删除元数据

三、数据加载与导出

1. 从本地文件系统加载数据

sql

LOAD DATA LOCAL INPATH 'local_file_path' 
[OVERWRITE] INTO TABLE table_name 
[PARTITION (partition_column=value)];

示例:加载本地数据到员工表

sql

LOAD DATA LOCAL INPATH '/home/user/employees.csv' 
OVERWRITE INTO TABLE employees;

2. 从 HDFS 加载数据

sql

LOAD DATA INPATH 'hdfs_file_path' 
[OVERWRITE] INTO TABLE table_name 
[PARTITION (partition_column=value)];

3. 插入数据到表

sql

INSERT INTO TABLE table_name [PARTITION (partition_column=value)]
SELECT column1, column2, ... FROM source_table;

4. 导出数据到本地

sql

INSERT OVERWRITE LOCAL DIRECTORY 'local_output_path'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
SELECT column1, column2, ... FROM table_name;

四、查询操作

1. 基本查询

sql

SELECT column1, column2, ... 
FROM table_name 
[WHERE condition]
[GROUP BY column]
[HAVING condition]
[ORDER BY column [ASC|DESC]]
[LIMIT number];

2. 关联查询

sql

SELECT a.column, b.column 
FROM table_a a
JOIN table_b b ON a.key = b.key; -- INNER JOIN
-- LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN

3. 子查询

sql

SELECT * FROM table_name 
WHERE column IN (SELECT column FROM another_table WHERE condition);

五、分区与分桶

1. 添加分区

sql

ALTER TABLE table_name ADD [IF NOT EXISTS]
PARTITION (partition_column=value) [LOCATION hdfs_path];

2. 删除分区

sql

ALTER TABLE table_name DROP [IF EXISTS] PARTITION (partition_column=value);

3. 创建分桶表

sql

CREATE TABLE [IF NOT EXISTS] table_name (
  column_name data_type,
  ...
)
CLUSTERED BY (column) INTO num_buckets BUCKETS;

六、常用函数

1. 字符串函数

sql

SELECT CONCAT('Hello', ' ', 'World'); -- 拼接字符串
SELECT SUBSTR('Hive', 1, 2); -- 截取子串,返回'HI'
SELECT LENGTH('Hive'); -- 返回长度4

2. 日期函数

sql

SELECT CURRENT_DATE(); -- 获取当前日期
SELECT DATE_FORMAT('2023-01-01', 'yyyy-MM-dd'); -- 格式化日期

3. 聚合函数

sql

SELECT COUNT(*), AVG(salary), MAX(salary) FROM employees;

七、其他常用命令

1. 查看 Hive 版本

sql

SELECT VERSION();

2. 执行 HQL 脚本

bash

hive -f /path/to/script.hql

3. 查看作业历史

sql

SHOW HISTORY;

4. 设置 Hive 参数

sql

SET hive.exec.dynamic.partition.mode=nonstrict; -- 动态分区模式

<think>好的,用户想了解如何在Hive中使用Hadoop的fs命令。首先,我得确认用户对HiveHadoop的关系是否清楚。Hive是基于Hadoop数据仓库工具,通常用户可能已经有一定的基础,但需要具体的操作指导。 用户的问题是关于使用hadoop fs命令在Hive中的用法。Hive本身支持直接执行HDFS命令,但可能用户不太清楚具体的操作方式,或者遇到权限问题。需要分步骤说明如何在Hive CLI或Beeline中执行这些命令,以及常见的操作示例。 首先,我应该回顾Hive中执行HDFS命令的两种方法:使用!前缀直接执行,或者通过dfs命令。需要明确两者的区别和使用场景,比如!hadoop fs适用于复杂命令,而dfs是简写形式。然后列举常用命令,如ls、mkdir、put、get、rm等,并给出具体的例子。 同时,用户可能在实际操作中会遇到权限问题,或者路径错误,所以需要提醒注意事项,比如权限检查、路径格式、引号的使用等。此外,HiveHadoop的版本兼容性也可能影响命令的执行,需要建议用户根据版本调整命令。 可能用户需要的是快速参考指南,所以结构要清晰,分点列出,便于查阅。还要注意命令的正确格式,比如在Hive CLI中是否需要引号,路径是否需要用引号包裹,避免因为语法错误导致执行失败。最后,总结最佳实践,帮助用户避免常见错误,比如测试命令、使用绝对路径等。</think>以下是在Hive中使用Hadoop文件系统(HDFS)命令的详细指南: --- ### 一、基础使用方式 Hive支持通过两种方式直接执行HDFS命令: #### 1. **使用 `!` 前缀** ```sql !hadoop fs [command]; -- 示例 !hadoop fs -ls /user/hive/warehouse; ``` #### 2. **使用 `dfs` 快捷命令** ```sql dfs [command]; -- 示例 dfs -ls /user/hive/warehouse; ``` --- ### 二、常用命令示例 | 功能 | 命令格式 | 示例 | |------|---------|------| | **查看文件列表** | `-ls [-R] <path>` | `dfs -ls -R /user;` | | **创建目录** | `-mkdir [-p] <path>` | `dfs -mkdir -p /data/logs;` | | **上传文件** | `-put <local> <remote>` | `dfs -put /tmp/data.csv /input/;` | | **下载文件** | `-get <remote> <local>` | `dfs -get /output/result.csv /home/;` | | **查看文件内容** | `-cat <path>` | `dfs -cat /logs/access.log;` | | **删除文件/目录** | `-rm [-r] <path>` | `dfs -rm -r /tmp/old_data;` | | **复制文件** | `-cp <src> <dst>` | `dfs -cp /input/data /backup/;` | | **移动文件** | `-mv <src> <dst>` | `dfs -mv /temp/staging /processed/;` | | **查看空间使用** | `-du [-h] <path>` | `dfs -du -h /user/hive;` | | **权限管理** | `-chmod [-R] <mode> <path>` | `dfs -chmod -R 755 /data;` | --- ### 三、特殊场景操作 #### 1. **Hive表数据位置操作 ```sql -- 查看表存储路径 DESC FORMATTED table_name; -- 查看Location字段 -- 直接操作表路径 dfs -ls /user/hive/warehouse/mydb.db/mytable; ``` #### 2. **数据加载时的配合使用** ```sql -- 先上传文件到HDFS dfs -put /local/data.csv /input/; -- 再加载到Hive表 LOAD DATA INPATH '/input/data.csv' INTO TABLE my_table; ``` --- ### 四、注意事项 1. **权限问题** - Hive执行HDFS命令时使用当前用户的HDFS权限 - 需要确保用户对目标路径有相应权限 ```bash # 查看权限 dfs -ls -d /path ``` 2. **路径格式** - 必须使用HDFS绝对路径(以`/`开头) - 建议用引号包裹含空格的路径 ```sql dfs -mv "/old dir" "/new dir"; ``` 3. **执行环境差异** - Hive CLI支持直接执行 - Beeline需要开启`hive.ddl.output.format`配置 - 在脚本中使用需添加分号结尾 --- ### 五、调试技巧 1. **查看完整Hadoop命令** ```sql SET hive.ddl.output.format=text; -- 显示原始输出 ``` 2. **错误处理** ```sql -- 典型错误:找不到文件 -- 解决方案:检查路径是否存在 dfs -test -e /path/to/file; ``` 3. **性能优化** ```sql -- 合并小文件(Hive 3.0+) dfs -getmerge /input/small_files merged.csv; ``` --- ### 六、版本兼容性 | Hive版本 | 特性支持 | |---------|---------| | ≤2.3.x | 仅支持基本命令 | | ≥3.0.x | 支持`-put`/`-get`等高级操作 | | ≥4.0.x | 完整支持所有Hadoop 3.x命令 | > 提示:建议通过`!hadoop version`确认Hadoop版本,使用`!hadoop fs -help`查看完整命令帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值