hive 表操作的基本sql
Posted 阿飞聊风控
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive 表操作的基本sql相关的知识,希望对你有一定的参考价值。
- 创建一个新表
create table temp.course(
cno string,
cname string,
tno string
)row format delimited fields terminated by '\\t' lines terminated by '\\n'
- 表中添加数据
insert into temp.course values ('3-105', '计算机导论', 825),
('3-245', '操作系统', 804),
('6-177', '高等数学', 100);
- 利用select 查询结果来创建新表
create table temp.course_2 as select cno, cname from temp.course
注意:这种方式建的的表是非分区表,是内部表
- 查看表结构
desc temp.course_2
- 创建分区表
create table order_basic_info (order_id string comment '',
buyer_id string comment '',
seller_id string comment ''
)
partition by(day string)
locattion 'hdfs://user/hive/warehouse/temp.db/order_basic_info'
- 向已有表中导数
insert into table temp.ad select * from vc.ad_rule_result where day>='2020-11-10' # 向已有的表中导数
insert overwrite table temp.ad select * from vc.ad_rule_result where day>='2020-11-10' # 向已有的表中导数,覆盖原数据
- 删除某个表
drop table temp.course_new2 # 删除整个表
- 复制一个表结构
create table temp.course_new2 like temp.course
- 清空表数据
truncate table temp.course_new # 使用truncate仅可删除内部表数据,不可删除表结构
- 添加一个字段
alter table temp.course add columns (id String)
- 删除一个分区
alter table temp.course drop partition (day='')
- 删除一个字段
alter table temp.course replace columns(
cno string,
cname string,
tno string
)
注意:不能用spark sql 来跑,否则回报Operation not allowed: alter table replace columns(line 1, pos 0)的错误
原因是:replace columns spark并没有实现这个功能
但是 hive sql是可以跑成功的,另外hive sql没有删除字段的语法,可以用replace来替换
- 如何创建含named_struct结构的表
named_struct类型,主要用这个函数做字段拼接,并且每个字段都可以取别名;
首先,创建一个中间表:
spark.read.csv("/user/vc/users/test/test.csv").toDF("risk_id", "shop_id", "user_id")
.write.mode("overwrite").saveAsTable("temp.ugc_user_info_old")
然后,创建一个含struct数据结构的表
CREATE TABLE temp.ugc_user_info(
risk_id string COMMENT '',
user_info struct<shop_id:string,user_id:string> COMMENT '') COMMENT ''
LOCATION 'hdfs://user/vc/users/test/temp.db/ugc_user_info'
最后,从中间表把数据导入到正式表
INSERT INTO temp.ugc_user_info SELECT risk_id, named_struct('shop_id',shop_id,'user_id',user_id) as user_info from temp.ugc_user_info_old
## 或者省去了创建表的麻烦
create table temp.ugc_user_info as
SELECT risk_id, named_struct('shop_id',shop_id,'user_id',user_id) as user_info
from temp.ugc_user_info_old
注意:您不能直接在Hive中插入复杂数据类型.对于插入结构,您有函数named_struct.您需要创建一个虚拟表,其中包含要插入所需表的"结构"列中的数据.
- map 类型,可以通过str_to_map()来创建:
insert into test3(field2)
values(
str_to_map("name:zhangsan,age:25")),
(str_to_map("name:lisi,age:23")
);
select
str_to_map(concat_ws(',',collect_set(concat(seller_id,'=',buyer_id))),',','=') as
from vc.dwd_order_basic_info_p where day='2022-01-10' limit 10
以上是关于hive 表操作的基本sql的主要内容,如果未能解决你的问题,请参考以下文章