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

Posted MIDSUMMER_yy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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可根据情况自选

以上是关于Hive 常用命令 | 表操作 | 分区操作 | 数据导入 | 权限处理 | 查看锁 | 解锁 | 多字符分隔符建表的主要内容,如果未能解决你的问题,请参考以下文章

hive表信息查询:查看表结构表操作等

hive外部表分区

Hive表操作二(管理表外部表分区表)

Hive的分区操作~~~~~~

Hive的分区操作

Hive管理表分区的创建,数据导入,分区的删除操作