Hive 常用命令 | 表操作 | 分区操作 | 数据导入 | 权限处理 | 查看锁 | 解锁 | 多字符分隔符建表

Hive 常用命令 | 表操作 | 分区操作 | 数据导入 | 权限处理 | 查看锁 | 解锁 | 多字符分隔符建表

查看表信息

desc formatted table_name

同时复制表结构及数据

create table AAA like BBB;
hadoop fs -cp BBB/* AAA
-- 如果是分区表的话需要执行以下命令
MSCK REPAIR TABLE AAA;

删除字段操作(因为hive不提供删除单个字段的命令,故只能全部设置然后覆盖)

ALTER TABLE xxx REPLACE COLUMNS(

aaa        string,

bbb     string,

...

);   

新增字段

alter table xxx add columns(aaa string);

hive修改字段

alter table xxx change column aaa bbb string;
-- 如果表是分区表,部分修改会对老分区不起作业,需要在后面添加cascade关键字
alter table xxx change column aaa bbb string cascade; 

hive添加/删除分区

alter table xxx add/drop partition (aaa='bbb');
-- 其中删除分区可以设置为区间
alter table xxx drop partition (aaa<'bbb');

查看表的锁

show locks xxx;
-- 如果想看是被哪个语句占的锁后面加EXTENDED关键字,会显示占的sql和占的时间戳
show locks xxx EXTENDED;

解锁表

补充说明:Hive的锁分为两种, Shared 和 Exclusive

Shared 简单的说就是有任务在查询这个表

Exclusive 简单的说就是有任务在修改这个表,包括修改表元数据(添加字段、操作分区等操作都是)、写入/删除数据

两种锁为互斥关系,比如我想查询这个表时,发现这个表是Exclusive时就无法查询

这时候要么等待生成Exclusive锁的进程执行完毕,要么执行下面的命令解锁表

unlock table xxx

使当前窗口执行的sql无视锁

set hive.support.concurrency=false;

查看Hive有哪些分区

show partitions table_name;

修改Hive表的分割符

补充:

field.delim是表的两个列字段之间的文件中的字段分隔符

serialization.format是文件序列化时表中两个列字段之间的文件中的字段分隔符

修改分割符时最好两个都修改,否则很多时候会出现问题

-- 以|为例
alter table xxx set serdeproperties('field.delim'='\|');
alter table xxx set serdeproperties('serialization.format'='\|');

修改表名

ALTER TABLE name RENAME TO new_name;

查看当前角色

 SHOW CURRENT ROLES;

显示该角色的全部表权限

show grant role 角色名;

赋予权限(select仅指查询权限,替换为all 可赋予全部权限)

-- 赋予表的权限
grant select on table table_name to role role_name;
-- 赋予数据库的权限
grant select on database db_name to role role_name;

外部表(外部路径)赋权

grant all on uri 'path' to role role_name;

收回权限

-- 收回数据库的权限
revoke select on database db_name from role role_name;
-- 收回表的权限
revoke select on table table_name from role role_name;

从hdfs上导入数据

 -- 追加
 load data inpath 'path' into table xxx; 
 -- 覆盖,后面的load同理
 load data inpath 'path' overwrite into table xxx; 

从本地导入数据

 load data local inpath 'path' into table xxx; 

导入某一个分区

load data inpath 'path' overwrite into table `xxx` PARTITION(XXX);  

Hive建表时如果想使用多字符做分隔符时,正常的建表语句无法创建,用下面的语句可以

-- 以|=|为例
create table XXX(
)
row format serde 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
with serdeproperties("field.delim"="|=|");

使用多字符做分隔符时,发现字段的注释无法正常显示,执行下面的内容可正常显示

set hive.serdes.using.metastore.for.schema=org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe;

使用多字符做分隔符时,如果遇到报org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe类找不到的报错,可重启服务端,添加如下jar包

hive-contrib-1.1.0-cdh5.14.0.jar

版本和是否为cdh可根据情况自选

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MIDSUMMER_yy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值