如何更改配置单元表所有者

iklwldmw  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(551)

我创建了一个配置单元表“sample”,所有者为“x”

hive> show table extended like sample;

--将所有者显示为“x”
有没有一种方法可以在不重新创建表(不想丢失数据)的情况下将所有者更改为其他“y”
一个已知的选项是直接在postgreshive metastore表中更新所有者。

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

这安全吗?

u4vypkhs

u4vypkhs1#

据我所知,除了直接更改metastore db之外,没有其他方法可以做到这一点。我需要这样做几次-没有任何问题。

js5cn81o

js5cn81o2#

我刚刚经历了这个问题,可以和大家分享我的解析笔记,为我的“metastoredb的直接改变”增色。在我们的配置中,我们使用连接到Hive的presto。表将在配置单元中与presto连接的任何用户一起创建(与 --user presto cli上的标志)。
我们收到一条错误消息,例如:

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

我可以通过对配置单元元存储执行以下查询来查看表的用户:

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';

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

相关问题