Hive最常用命令-收藏一篇足够(大厂常用篇)


1、Hive常用表操作语句

A、创建Hive内部表

CREATE TABLE `table_name`(	
  `sku_id` string COMMENT 'sku_id', 	
  `brand_code` bigint COMMENT '品牌code', 	
  `item_first_cate_cd` string COMMENT '一级品类', 	
  `item_second_cate_cd` string COMMENT '二级品类', 	
  `item_third_cate_cd` string COMMENT '三级品类')	
COMMENT '测试表'	
PARTITIONED BY ( 	
  `dt` string COMMENT 'yyyy-MM-dd')	  --- 时间分区
ROW FORMAT SERDE 	
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde' --- ORC表格式	
STORED AS INPUTFORMAT 	
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 	
OUTPUTFORMAT 	
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'

注意:当数据删除的时候 表元数据和真实数据 都会被删除

表名重命名:

alter table table_name rename to table_name1;

加载历史数据:

1、INSERT OVERWRITE 会覆盖当前分区所有数据

2、INSERT INTO 会追加数据到当前分区,不会覆盖

3、PARTITION(DT) 指定分区为DT, 也可 PARTITION(DT=‘2023-01-01’) 如果这样写 SELECT后面就无需写DT字段列

INSERT OVERWRITE TABLE TABLE_NAME_B PARTITION(DT)
SELECT
SKU_ID,
SKU_NAME,
DT
FROM TABLE_NAME_A

如果无分区:

INSERT OVERWRITE TABLE TEST.TABLE_B 
SELECT
SKU_ID,
SKU_NAME,
......
FROM TABLE_A

B、表列常规操作

增加一个列:

alter table table_name add columns(user_id bigint comment '用户ID');

编辑一个列:

# 将性别(name)名称改成sku_name,类型改成string,注释改成“商品名称”
alter table table_name change name sku_name string comment '商品名称';

# 将sku_name字段类型改为string,并将位置移动到sku字段后面
alter table table_name change sku_name sku_name string comment '商品名称' after sku;

2、Hive常用函数使用

Json解析:

1)get_json_object

select get_json_object('{"movie":"594","rate":"4"}','$.movie');

2)json_tuple【适合一次解析多个Key】

select b.b_movie,
       b.b_rate,
       b.b_timeStamp,
       b.b_uid 
from json a 
lateral view json_tuple(a.data,'movie','rate','timeStamp','uid') b as b_movie,b_rate,b_timeStamp,b_uid

Map结构解析:

1)生成Map结构数据

select map('a','1','b','2');

结果:{"a":"1","b":"2"}

select map('key1',str_to_map('a:1,b:2',',',':'),'key2',str_to_map('a:1,b:2',',',':'));

结果:{"key1":{"a":"1","b":"2"},"key2":{"a":"1","b":"2"}}

2)获取某个Key的值

select map("key1", 1, "key2", 2, "key3", "dd")['key1'] as v1

结果:1

3)Map长度

 select size(map("key1", 1, "key2", 2, "key3", "dd")) as v1

结果:3

Array结构解析:

1)explode【行转列】

输入: 1        sku1,sku2,sku3

select
    sku,
    sale_qty 
from
    sku_table
    lateral view explode(split(sku_list,',')) t as sku

结果:

sku1        1

sku2        1

sku3        1

2)posexplode

select
    sku_index + 1 as sku_index,
    sku_name
from
    (
        select 'sku2,sku1,sku3' as sku_list
    ) a
    lateral view posexplode(split(sku_list,',')) t as sku_index,sku_name

结果:按照字符串的顺序排序,+1是因为索引从0开始,使其从1开始

 3)多列Explode

select
    sku,
    sku_name
from
    (
        select 'sku1,sku2,sku3' as sku_list,
               'sku_name1,sku_name2,sku_name3' as sku_name_list
    ) a
    lateral view explode(split(sku_list,',')) sn as sku
    lateral view explode(split(sku_name_list,',')) sc as sku_name

结果:

3、Hive的Archive数据的归档

1、Arichive文件是一个打包文件,但是不会对文件进行压缩
2、Arichive文件归档之后,我们还可以透明的访问其中的每一个小文件
3、Archive主要解决HDFS不擅长存储小文件问题
4、Archive过程是一个MapReduce任务
5、Archive之后,原来的文件依然保留

涉及参数:

hive> set hive.archive.enabled=true;
hive> set hive.archive.har.parentdir.settable=true;
hive> set har.partfile.size=1099511627776;

归档命令:

ALTER TABLE srcpart ARCHIVE PARTITION(ds='2008-04-08', hr='12')

解压命令:

ALTER TABLE srcpart UNARCHIVE PARTITION(ds='2008-04-08', hr='12')

问题注意:如果报错 java.lang.NoClassDefFoundError:org/apache/hadoop/tools/HadoopArchives

说明Hive Lib缺少归档jar包,从Hadoop的Lib目录下拷贝Archive相关类到Hive的Lib下面,利用下面的命令查找归档jar包

find /data1/hadoop/hadoop/ -name *archive*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊猫码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值