如果有两个分区列,例如。学校名称和班级如何重命名所有学校分区中存在的特定班级分区
所以,
/学校=ABC/班级=1/
/学校=PQR/班级=1/
.
.
.
.
class = 1 应转换为 class = 2
/学校=ABC/班级=2/
/学校=PQR/班级=2/
.
.
.
.
编辑:在这个例子中只有两所学校,但它是可变的,可能有数千所学校。
如果有两个分区列,例如。学校名称和班级如何重命名所有学校分区中存在的特定班级分区
所以,
/学校=ABC/班级=1/
/学校=PQR/班级=1/
.
.
.
.
class = 1 应转换为 class = 2
/学校=ABC/班级=2/
/学校=PQR/班级=2/
.
.
.
.
编辑:在这个例子中只有两所学校,但它是可变的,可能有数千所学校。
您可以尝试从元数据中获取分区信息。
1> 从 hive-site.xml 文件中获取元数据信息(位置:/hive/installation/location/hive/hive-2.1/conf)
2> 获取环境和凭据
<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 语句。
希望这可以帮助。
如果表是托管表,您可以简单地使用以下命令重命名分区,
alter table tbl_name PARTITION (school='ABC', class=1) RENAME TO PARTITION (school='ABC', class=2);
alter table tbl_name PARTITION (school='PQR', class=1) RENAME TO PARTITION (school='PQR', class=2);
下面是我在蜂巢中尝试过的执行,
hive> 创建表 tbl_name (
name string, age int) 由 (school string, class int) 划分;
hive> alter table tbl_name ADD PARTITION (school='ABC', class=1); OK 耗时:0.157 秒
hive> alter table tbl_name ADD PARTITION (school='PQR', class=1); OK 耗时:0.128 秒
hive> 显示分区 tbl_name;OK 学校=ABC/班级=1 学校=PQR/班级=1
hive> alter table tbl_name PARTITION (school='ABC', class=1) RENAME TO PARTITION (school='ABC', class=2); OK 耗时:0.468 秒
hive> alter table tbl_name PARTITION (school='PQR', class=1) RENAME TO PARTITION (school='PQR', class=2); OK 耗时:0.432 秒
hive> 显示分区 tbl_name;OK 学校=ABC/班级=2 学校=PQR/班级=2
希望这会有所帮助。