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