hadoop - hive 查询多次点击同一个 View ,任何最佳方式来处理这个查询

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

我们正在支持运行通过 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 ; 

我当然不认为,他们需要多次扫描同一个 View 有没有更简单的方法来写这个。 或者肯定可以合并多阶段映射,这是我的猜测。除此之外,是否还有其他更简单的方法来处理相同的问题。 我是新手,在支持方面,但这个查询运行了几个小时,所以需要检查它是否以正确的方式运行。我确信可以丢弃一个内部选择,我可以尝试任何其他选择。

最佳答案

你问题中的这些子查询不是问题,优化器会处理这个问题。不会多次读取相同的数据。您的查询只读取源代码一次:FROM sw.v_cust_info_pr t1。整个查询将在两个顶点中执行 - Mapper 1 和 Reducer 2。使用 explain select检查这个。为了加快处理速度,use Tez, CBO, vectorizing, PPD, tune proper parallelism on mappers and reducers .使用 map 端聚合 set hive.map.aggr = true;

关于hadoop - hive 查询多次点击同一个 View ,任何最佳方式来处理这个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55058893/

相关文章:

mysql - 如何将数据从 Hadoop 导出到 MySQL/任何数据库?

hadoop - 配置单元查询转储问题

sql - 我可以使用索引优化包含 WHERE Value <> 2 的请求吗

hadoop - Sqoop 导出插入重复条目

hadoop - hadoop字数示例

hadoop - 从 Teradata Studio Express 15.10 连接 HDP

hadoop - AWS EMR Hive 分区无法识别任何类型的分区

mysql - 在具体化子查询上指定外部查询的条件

sql - 为什么 Wordpress 有单独的 'usersmeta' 和 'users' SQL 表。为什么不把它们结合起来呢?

hadoop - Presto 不从 Hive Metabase 返回行