hive常用命令记录
- 1. Table相关操作
- 1.1 创建表
- 1.2 增加列
- 1.3 删除列
- 2. 日期相关操作
- 2.1 日期串截取
- 2.2 转换时间戳为 yyyy-MM-dd格式
- 3. 使用case when实现行列互转
1. Table相关操作
1.1 创建表
CREATE TABLE app.table_name
(id BIGINT COMMENT 'id',column_A string COMMENT '列A',column_B string COMMENT '列B',column_C string COMMENT '列C'
)
COMMENT '表描述';
1.2 增加列
ALTER TABLE app.table_name
ADD COLUMNS
(column_D string COMMENT '列D'
);
1.3 删除列
不支持delete column操作,可以使用replace columns实现字段删除操作;
删除column_C
ALTER TABLE dev.edi_partner_service_usage replace columns (id BIGINT COMMENT 'id',column_A string COMMENT '列A',column_B string COMMENT '列B',column_D string COMMENT '列D'
);
2. 日期相关操作
2.1 日期串截取
取yyyy-MM-dd HH:mm:ss格式日期串的yyyy-MM-dd部分,使用字符串SUBSTR函数;
SUBSTR(create_time, 1, 7)
2.2 转换时间戳为 yyyy-MM-dd格式
from_unixtime(cast(logging_request_time/1000 as bigint), 'yyyy-MM-dd')
3. 使用case when实现行列互转
假设现在有如下数据(表 score )
姓名 | 科目 | 成绩 |
---|---|---|
晓明 | 语文 | 100 |
晓明 | 数学 | 100 |
晓明 | 英语 | 100 |
小红 | 语文 | 100 |
小红 | 数学 | 100 |
小红 | 英语 | 100 |
我们希望以如下方式展示
姓名 | 语文 | 数学 | 英语 |
---|---|---|---|
晓明 | 100 | 100 | 100 |
小红 | 100 | 100 | 100 |
可以使用case when来实现
select 姓名,case when 科目='语文' THEN score ELSE 0 END 语文,case when 科目='数学' THEN score ELSE 0 END 数学,case when 科目='英语' THEN score ELSE 0 END 英语
from score
group by 姓名