配置单元查询多次击中同一视图,采用任何最佳方式处理此查询

时间:2019-03-08 07:54:21

标签: hadoop hive query-optimization yarn apache-tez

我们正在支持正在运行通过ETL工具触发的大量蜂巢查询的应用程序。

映射后的查询在配置单元上运行。 查询很大,但是它的结构看起来像这样。

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 ; 

我当然不认为,他们需要多次扫描同一视图 有没有更简单的方法可以编写此代码。 我猜想或者肯定可以合并多阶段映射。除此之外,还有没有其他更简单的方法可以实现相同的目的。 我是新手并且在支持方面,但是此查询运行了几个小时,因此需要检查其是否以正确的方式运行。我确定可以放弃一个内部选择,而我可以尝试其他任何选择。

1 个答案:

答案 0 :(得分:0)

问题中的此类子查询不是问题,优化程序将对此进行处理。不会重复读取同一数据。您的查询仅读取源一次:FROM sw.v_cust_info_pr t1。整个查询将在两个顶点(映射器1和Reducer 2)中执行。使用explain select进行检查。要加快处理速度,请use Tez, CBO, vectorizing, PPD, tune proper parallelism on mappers and reducers。使用地图端聚合set hive.map.aggr = true;