我想在许多Hive表的位置更改存储桶名称。我们可以连接到mySQL数据库并进行更新吗?我认为这是可能的。但我想知道在生产数据库中是否安全。
答案 0 :(得分:0)
是的,这是可能的,我已经看到了;但
(a)没有记录Metastore架构,每个Hive版本都会带来一些细微的变化,因此您必须自己进行探索以查找位置/方式持久化StorageDescriptor
个对象 - 然后在开发系统上进行一些单元测试/非回归测试 - 另外,不要忘记运行完整的数据库备份在修补你的Prod系统之前(以及在你的开发系统上排练紧急恢复!)
(b)您必须更新表的StorageDescriptor
,还要更新分区 - 请记住,对于分区表,表级{ {1}}仅用作未来分区的默认根目录;一旦创建,分区将保留其位置,直到它被明确更改为止。
<小时/> 对于记录,批量更新的首选方法是(理论上)Hive MetaTool但不幸的是,它不支持您需要的更新类型。
残酷的SQL更新的有效替代将是使用Hive MetaStore API开发自定义Java程序来扫描所有表格&amp;分区然后读取他们的StorageDescriptor然后在他们的位置上运行RegEx更改然后回写更改(这正是MetaTool所做的,只是在较低级别)。但这太过分了。
LOCATION
){{3}链稍后在Hive CLI中运行的命令。regexp_replace()