Hive QL场景题第三部分详解

本文详细介绍了Hive SQL中的行转列、列转行操作,结合具体实例展示了如何进行数据转换。同时,还探讨了时间戳函数`unix_timestamp`和`from_unixtime`的使用,包括获取当前时间戳以及相互转化的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

11、行转列(行是水平、列是垂直 )

(行是从左往右,列是从前往后)

数据: t4表:

id tag flag 
a b 2
a b 1
a b 3
c d 6
c d 8
c d 8

编写sql实现如下结果:

id tag flag 
a b 1|2|3
c d 6|8
create table t4( 
id string, 
tag string, 
flag int 
)
row format delimited 
fields terminated by ' ' 
;
​
load data local inpath './hivedata/t4.txt' overwrite into table t4;
分析:
行转列就是从左完网右的数据变成从前往后
行:水平
列:垂直
思想:就是建立一张虚表,临时存储
​
​
select id,tag,
concat_ws("|",collect_set(cast(flag as string)))
from t4
group by id,tag;
​
result:
a       b       2|1|3
c       d       6|8

12、列转行(垂直转水平)

数据: t5表

uid name tags 
1	goudan	chihuo,huaci
2	mazi	sleep
3	laotie	paly

编写sql实现如下结果

### Hive 中 `ALTER TABLE` 操作的用法详解 #### 1. 删除分区 (`DROP PARTITION`) 在大数据环境中,Hive 提供了灵活的操作方式来管理表及其分区。如果需要删除某个特定分区的数据而不影响整个表结构,则可以使用 `ALTER TABLE ... DROP PARTITION` 命令[^1]。 以下是具体语法和示例: ```sql -- 删除指定分区 ALTER TABLE table_name DROP IF EXISTS PARTITION (partition_spec); ``` 其中,`partition_spec` 表示分区条件,通常是一个键值对的形式。例如: ```sql -- 示例:删除名为 student_data 的表中 year=2023 和 month=1 的分区 ALTER TABLE student_data DROP IF EXISTS PARTITION (year=2023, month=1); ``` 此命令会移除符合条件的分区以及该分区下的数据文件[^1]。 --- #### 2. 修改列属性 (`CHANGE COLUMN`) 当需要调整现有列的名称、类型、注释或位置时,可使用 `ALTER TABLE ... CHANGE [COLUMN]` 命令[^3]。然而,在执行此类操作时需要注意兼容性和实际数据的一致性。 ##### **常见错误** 尝试修改列名或类型时可能会遇到类似以下错误: ``` FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. The following columns have types incompatible with the existing columns in their respective positions : gender ``` 这表明新定义的列与原始列存在不兼容的情况,比如数据类型的转换失败或者存储格式冲突[^2]。 ##### **解决方案** - 确保目标数据类型能够容纳当前数据集中的所有值。 - 如果涉及复杂变更(如从字符串转为整数),建议先备份原表并验证逻辑后再实施更改。 下面是成功案例的一个例子: ```sql -- 将 sex 列重命名为 gender 并更新其注释 ALTER TABLE school_class_info CHANGE COLUMN sex gender INT COMMENT '性别' AFTER name; ``` 注意这里指定了新的顺序关系(即放置于 `name` 字段之后)。如果没有特别需求,默认保持原有排列不变即可[^3]。 --- #### 3. 添加新列 (`ADD COLUMNS`) 除了修改已有字段外,还可以向已存在的表格追加额外的信息维度。通过下面的方式实现新增功能的同时不影响既有业务流程运行状态: ```sql ALTER TABLE table_name ADD COLUMNS (new_column_name data_type [COMMENT 'comment']); ``` 举个简单的实例说明如何扩展学生档案记录里加入出生日期这一项: ```sql ALTER TABLE student_profile ADD COLUMNS (birthdate DATE COMMENT '学生的生日'); ``` 这样就完成了对该数据库对象结构上的扩充处理过程。 --- ### 总结 以上介绍了三种主要场景下利用 Hive SQL 进行表结构调整的方法——包括但不限于删减无用的历史分片资料;优化命名体系以便更直观表达语义含义;最后则是依据项目进展适时引入必要的补充指标参数等内容。每一步都需要谨慎对待以防止意外丢失重要资产或是引发不必要的计算开销等问发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值