hive查询多次命中同一视图,任何最佳方式都可以处理此查询

x7rlezfr  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(465)

我们正在支持一个运行通过etl工具触发的巨大配置单元查询的应用程序。
Map后的查询在配置单元上运行。查询非常大,但其结构如下所示。

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 ;

我当然不认为,他们需要多次扫描同一个视图,有没有更简单的方法来写这个。或者多阶段Map可以合并,这是我的猜测。除此之外,还有没有其他更简单的方法来达到同样的目的。我是新的,在支持方面,但这个查询运行了几个小时,所以需要检查它是否以正确的方式运行。我确信一个内在的选择可以被丢弃,任何我可以尝试的东西。

u3r8eeie

u3r8eeie1#

在您的问题中这样的子查询不是问题,优化器会处理这个问题。不会多次读取同一数据。您的查询只读取源代码一次: FROM sw.v_cust_info_pr t1 . 整个查询将在两个顶点中执行-Map器1和还原器2。使用explain select检查此项。为了加快处理速度,可以使用tez、cbo、vectorizing、ppd,在mappers和reducer上调整适当的并行性。使用Map端聚合 set hive.map.aggr = true;

相关问题