因此,我尝试使用包含1500条不同记录的“文件”列对我的Impala表进行分区。这意味着1500个分区。我首先运行这样的查询来返回分区查询:
SELECT DISTINCT
concat('insert into partitioned_table partition (year=',
cast(year as string),', month=',cast(month as string),
') select c1, c2, c3 from raw_data where year=',
cast(year as string),' and month=',cast(month as string),';') AS command
FROM raw_data;
然后我有1500个查询要运行。
现在有一个问题:由于每个查询可能需要3分钟才能完成。 1500次查询可能需要几天时间。这是一段很长的时间。为了节省时间,我已经做了一些调整:使用COMPUTE STATS获取静态,将表转换为Parquet。我的问题是,有没有办法可以加快这个过程?就像Hive可以做的最大执行者一样?
答案 0 :(得分:2)
您可以使用dynamic partitioning
fill
演示
insert into partitioned_table partition (year,month)
select c1, c2, c3, year, month
from raw_data
create table t (i int) partitioned by (year string,month string);
insert into t partition (year,month) values
( 1,'2015','02')
,( 2,'2017','01')
,( 3,'2016','02')
,( 4,'2013','09')
,( 5,'2015','07')
,( 6,'2012','03')
,( 7,'2012','12')
,( 8,'2017','12')
,( 9,'2015','11')
,(10,'2015','02')
;
select * from t order by year,month,i;
+----+------+-------+
| i | year | month |
+----+------+-------+
| 6 | 2012 | 03 |
| 7 | 2012 | 12 |
| 4 | 2013 | 09 |
| 1 | 2015 | 02 |
| 10 | 2015 | 02 |
| 5 | 2015 | 07 |
| 9 | 2015 | 11 |
| 3 | 2016 | 02 |
| 2 | 2017 | 01 |
| 8 | 2017 | 12 |
+----+------+-------+