如何重命名配置单元中的多个分区?

nfs0ujit  于 2021-06-27  发布在  Hive
关注(0)|答案(2)|浏览(478)

如果有两个分区列,例如学校名称和类,我如何重命名一个特定的类分区,这是所有学校分区内的存在
所以,
/学校=/班级=1/
/学校=pqr/班级=1/
.
.
.
.
类=1应转换为类=2
/学校=/班级=2/
/学校=pqr/班级=2/
.
.
.
.
编辑:在这个例子中只有两所学校,但它是可变的,可能有数千所学校。

llmtgqce

llmtgqce1#

如果表是托管表,您只需使用下面的命令重命名分区,
将表tbl\u name partition(school='',class=1)重命名为partition(school='',class=2);
将表tbl\u name partition(school='pqr',class=1)重命名为partition(school='pqr',class=2);
下面是我在 hive 里试过的死刑,
配置单元>创建表tbl\U名称(
name string,age int)按(school string,class int)分区;
hive>alter table tbl\u name add partition(school='',class=1);确定所用时间:0.157秒
hive>alter table tbl\u name add partition(school='pqr',class=1);正常时间:0.128秒
配置单元>显示分区tbl\U名称;ok学校=/班级=1学校=pqr/班级=1
hive>alter table tbl\u name partition(school='',class=1)重命名为partition(school='',class=2);正常时间:0.468秒
hive>alter table tbl\u name partition(school='pqr',class=1)重命名为partition(school='pqr',class=2);确定所用时间:0.432秒
配置单元>显示分区tbl\U名称;ok学校=/班级=2学校=pqr/班级=2
希望这会有帮助。

eanckbw9

eanckbw92#

您可以尝试从元数据获取分区信息。
1> 从hive-site.xml文件(location:/hive/installation/location/hive/hive-2.1/conf)获取元数据信息
2> 获取env和凭据

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>[hostname]</value>
    <description>JDBC connect string for a JDBC metastore</description>
</property>

 <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>UserName</value>
    <description>username to use against metastore database</description>
 </property>

 <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>PWD</value>
    <description>password to use against metastore database</description>
 </property>

3> 连接到metastore,下面是获取分区信息的查询。

select D.NAME, P.PART_NAME,  T.TBL_NAME from PARTITIONS P INNER JOIN TBLS T ON P.TBL_ID=T.TBL_ID INNER JOIN DBS D ON T.DB_ID=D.DB_ID WHERE D.NAME=<DBNAME> AND T.TBL_NAME=<TBLNAME> AND P.PART_NAME LIKE '%class=2%';

一旦有了分区信息,就可以使用replace和concat函数来派生alter语句。
希望这有帮助。

相关问题