Объединить все разделы в динамически разделенной таблице Hive - PullRequest
1 голос
/ 08 июля 2019

Моя таблица кустов разбита по дате в течение двух лет, и каждый раздел содержит 200 файлов по 2 Мб.-12-31 ') concatenate "

Вручную для выполнения каждого запроса требуется больше времени, так есть ли какой-нибудь простой способ сделать это?

1 Ответ

2 голосов
/ 08 июля 2019

Вариант-1: Select and overwrite same hive table:

Hive поддерживает вставка перезаписи той же таблицы , если вы уверены, что данные, вставленные в таблицу кустов с использованием insert statements only (не загружая файлы через hdfs ), используйте эту опцию.

hive> SET hive.exec.dynamic.partition = true;
hive> SET hive.exec.dynamic.partition.mode = nonstrict;
hive> Insert overwrite table <partition_table_name> partition(<partition_col>) 
      select * from <db>.<partition_table_name>;

Вы также можете использовать сортировать, распределять по и эти дополнительные параметры , чтобы контролировать количество файлов, создаваемых в таблице.

Вариант-2 Using Shell script:

bash$ cat cnct.hql
alter table default.partitn1 partition(${hiveconf:var1} = '${hiveconf:var2}') concatenate

Запуск приведенного выше сценария .hql с использованием сценария оболочки (для цикла)

bash$ cat trigg.sh
#!/bin/bash
id=`hive -e "show partitions default.partitn"`
echo "partitions: " $id
for f in $id; do
echo "select query for: " $f
#split the partitions on = then assigning to two variables
IFS="=" read var1 var2 <<< $f
#pass the variables and execute the cnct.hql script
hive --hiveconf var1=$var1 --hiveconf var2=$var2 -f cnct.hql
done
...