首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >蜂窝联合所有效率和最佳实践

蜂窝联合所有效率和最佳实践
EN

Stack Overflow用户
提问于 2017-06-06 22:21:01
回答 1查看 3.4K关注 0票数 1

我有一个关于蜂巢效率的问题。我有两个大规模的查询,需要过滤,与映射表连接,并联合。两个表的所有联接都是相同的。在将连接应用于组合表之前联合它们是更有效,还是将连接单独应用于每个海量查询而不是联合结果?有什么不同吗?

我尝试了第二种方法,查询运行了24小时,然后我终止了它。我觉得我已经做了我能做的所有事情来优化它,除了可能会重新排列union语句。一方面,我觉得这无关紧要,因为映射表连接的行数或行数是相同的,而且由于所有内容都是官样化的,所以它应该花费大致相同的时间。另一方面,也许通过首先进行联合,它应该保证在运行连接之前为两个大查询提供完整的系统资源。再说一次,这可能意味着一次只有2个作业在运行,所以系统没有得到充分利用。

我对hive和它的多线程是如何工作的知之甚少。有谁有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2017-06-06 23:29:57

没有这样的最佳实践。这两种方法都适用。UNION ALL中的子查询作为并行作业运行。因此,联合之前的连接将作为具有较小数据集的并行任务工作,tez可以优化执行,并且每个表的公共连接表将在单个映射器阶段仅读取一次。此外,您还可以避免某些子查询的联接,例如,如果它们的键不适用于联接。

根据您的设置(例如,每个reducer的字节数),使用联合的较大数据集连接也可能具有非常高的并行度,优化器也可能重写查询计划。所以我建议你检查两种方法,测量速度,学习计划,检查你是否可以改变一些东西。改变,衡量,学习计划..。重复

更多的建议:在加入数据集之前,尝试限制它们。如果您的连接乘以行,那么分析和聚合在更大的数据集上的工作速度可能会更慢,如果您可以在联合之前应用分析/聚合,则第一种方法可能更可取。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44392599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档