如何更改配置表所有者

时间:2017-05-12 10:52:10

标签: hive

我有一个蜂巢表'样品'与所有者一起创建的' X'

hive> show table extended like sample;

- 将所有者显示为' X'

有没有办法可以将所有者更改为其他人,而无需重新创建表格(不想丢失数据)

一个已知选项是直接在postgres hive Metastore表中更新所有者。

hive=# update "TBLS" set "OWNER" = 'Y' where "OWNER" = 'X' and "TBL_NAME" = 'sample';

这样安全吗?

2 个答案:

答案 0 :(得分:0)

据我所知,除了直接改变Metastore DB之外别无他法。我需要这样做几次 - 没有任何问题。

答案 1 :(得分:0)

我刚刚遇到此问题,可以分享我的解决方案注释,以便为我的“在Metastore DB中直接更改”添加颜色。在我们的配置中,我们使用连接到Hive的Presto。将使用与Presto连接的任何用户(通过Presto CLI上的--user标志)在配置单元中创建表。

我们收到一条错误消息,例如:

Access Denied: Cannot drop table SCHEMA.TABLE_NAME: Owner of the table is 
different from session user

通过在Hive Metastore上执行以下查询,我可以看到表的用户:

select t.OWNER, p.PRINCIPAL_NAME, count(1) 
from TBLS t 
    join TBL_PRIVS p on p.TBL_ID=t.TBL_ID 
group by t.OWNER, p.PRINCIPAL_NAME;

然后,我可以通过执行以下操作来更新表:

update TBLS set OWNER='NEW_OWNER' where OWNER='OLD_OWNER';
update TBL_PRIVS set PRINCIPAL_NAME='NEW_OWNER' where PRINCIPAL_NAME='OLD_OWNER';

注意:您应该在事务中运行此操作,并确保首先备份您的Metastore。