Как мы можем переименовать несколько разделов в Hive? - PullRequest
0 голосов
/ 05 декабря 2018

Если есть два разделенных столбца, например.название школы и класс Как я могу переименовать определенный раздел класса, который присутствует во всех школьных разделах

,

/ school = ABC / class = 1 /

/ школа = PQR / класс = 1 /

.

.

.

.

class = 1 следует преобразовать в class = 2

/ school = ABC/ класс = 2 /

/ школа = PQR / класс = 2 /

.

.

.

.

Редактировать: в этом примере есть только две школы, но этоПеременная может быть тысячи школ.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Вы можете попробовать получить информацию о разделе из метаданных.

1> получить информацию о метаданных из файла hive-site.xml (расположение: /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.

Надеюсь, это поможет.

0 голосов
/ 05 декабря 2018

Если таблица является управляемой таблицей, вы можете просто использовать следующую команду для переименования раздела:

изменить таблицу tbl_name PARTITION (school = 'ABC', class = 1) RENAME TO PARTITION (school ='ABC', класс = 2);

изменить таблицу tbl_name PARTITION (school = 'PQR', class = 1) RENAME TO PARTITION (school = 'PQR', class = 2);

Ниже приведено выполнение, которое я пытался выполнить в кусте,

hive> создать таблицу tbl_name (

name string, age int), разделенную на (школьная строка, класс int);

hive> изменить таблицу tbl_name ADD PARTITION (school = 'ABC', class = 1);OK Время: 0,157 секунды

куст> изменить таблицу tbl_name ADD PARTITION (школа = 'PQR', класс = 1);OK Время выполнения: 0,128 секунды

куст> показать разделы tbl_name;OK школа = ABC / класс = 1 школа = PQR / класс = 1

улей> изменить таблицу tbl_name PARTITION (школа = 'ABC', класс = 1) ПЕРЕИМЕНОВАТЬ В РАЗДЕЛ (школа = 'ABC', класс =2);OK Время выполнения: 0,468 секунды

куст> изменить таблицу tbl_name PARTITION (school = 'PQR', class = 1) RENAME TO PARTITION (school = 'PQR', class = 2);OK Время выполнения: 0,432 секунды

куст> показать разделы tbl_name;OK школа = ABC / класс = 2 школа = PQR / класс = 2

Надеюсь, это поможет.

...