Hive查询多次击中相同的视图,这是接近此查询的任何最佳方法



我们支持一个通过ETL工具触发的巨大蜂巢查询的应用程序。

映射在Hive上运行后的查询。查询非常大,但其结构看起来像这样。

INSERT INTO Table2
Select t1.f0, t1.f1,
infUDFCallDouble('TO_FLOAT', t1.f2) as f2, 
SUBSTR(SUBSTR(toString(t1.f4, 'YYYY-MM-DD'), (CASE WHEN 0 < (- 
LENGTH(toString(t1.f4, 'YYYY-MM-DD'))) THEN 0 ELSE 0 END), 10), (CASE WHEN 0 < (- LENGTH(SUBSTR(toString(t1.f4, 'YYYY-MM-DD'), (CASE WHEN 0 < (- LENGTH(toString(t1.f4, 'YYYY-MM-DD'))) THEN 0 ELSE 0 END), 10))) THEN 0 ELSE 0 END), 10) as f4, 
f5, .....
FROM
   (
     Select t1.f0, t1.f1...
     FROM
        (
         SELECT CAST(t1.cust_id AS STRING) as f0, ....
          ...
         FROM sw.v_cust_info_pr t1
         )
     group by t1.f0, t1.f1
     .....t1.f50 )
t1 ; 

我肯定不认为,他们需要多次扫描相同的观点是否有更简单的方法来写这篇文章。我的猜测是或肯定可以合并多个阶段映射。除此之外,还有其他更简单的方法可以接近相同的方法。我是新手,并且在支持方面,但是此查询运行了几个小时,因此需要检查其是否以正确的方式运行。我确定可以丢弃一个内部选择,我可以尝试的任何其他选择。

在您的问题中类似的子问题不是问题,优化器会考虑到这一点。没有多次读取相同的数据。您的查询仅读取源:FROM sw.v_cust_info_pr t1。整个查询将在两个顶点执行 - 映射器1和还原器2.使用Select Select进行检查。为了加快加速处理,使用TEZ,CBO,矢量化,PPD,调整映射器和还原器的适当并行性。使用地图侧聚合set hive.map.aggr = true;

最新更新