我的配置单元表在2年内按日期进行分区,每个分区中有200个2mb文件。我能够连接运行以下命令“alter table\u name partition(partition\u column\u name='2017-12-31')concatenate”手动运行每个查询需要更多的时间,那么有什么简单的方法可以做到这一点吗?
3bygqnnd1#
选项1: Select and overwrite same hive table: 配置单元支持插入或覆盖同一个表,前提是使用 insert statements only (不通过hdfs加载文件)然后使用此选项。
Select and overwrite same hive table:
insert statements only
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>;
还可以使用sort by、distribute by和这些附加参数来控制表中创建的文件数。选项2: Using Shell script: ```bash$ cat cnct.hqlalter table default.partitn1 partition(${hiveconf:var1} = '${hiveconf:var2}') concatenate
Using Shell script:
触发上述 `.hql` 使用shell脚本编写脚本(for循环)
bash$ cat trigg.sh
id=hive -e "show partitions default.partitn"echo "partitions: " $idfor f in $id; doecho "select query for: " $f
hive -e "show partitions default.partitn"
IFS="=" read var1 var2 <<< $f
hive --hiveconf var1=$var1 --hiveconf var2=$var2 -f cnct.hqldone
1条答案
按热度按时间3bygqnnd1#
选项1:
Select and overwrite same hive table:
配置单元支持插入或覆盖同一个表,前提是使用insert statements only
(不通过hdfs加载文件)然后使用此选项。还可以使用sort by、distribute by和这些附加参数来控制表中创建的文件数。
选项2:
Using Shell script:
```bash$ cat cnct.hql
alter table default.partitn1 partition(${hiveconf:var1} = '${hiveconf:var2}') concatenate
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