Hive Union所有的效率和最佳实践



我有一个蜂巢效率问题。我有2个大量查询,需要过滤,与映射表连接并结合。所有联合对于两个表都是相同的。在将联接加入到组合表上或将连接分别应用于每个大量查询之后然后将结果应用于结果之前,将它们加入之前会更有效吗?这有什么不同吗?

我尝试了第二条,查询在我杀死它之前进行了24小时。我觉得我竭尽所能优化它,除了可能重新安排工会声明。一方面,我觉得这应该不重要,因为映射表将数字或行连接在一起的数字或行是相同的,并且由于所有内容都被化为apate,因此应该花费大约相同的时间。另一方面,也许首先要进行联盟,它应该保证在运行加入之前给出两个大查询。再说一次,这可能意味着一次只有2个作业,因此该系统没有被完全使用或其他内容。

我根本对蜂巢和多线程的工作方式了解不够。有人有任何想法吗?

没有这样的最佳实践。两种方法都是适用的。工会中的子征服都作为并行作业运行。因此,在Union将作为与较小数据集的并行任务一起工作之前,TEZ可以优化执行,并且每个表的单次映射阶段中只能读取一次通用联接表。另外,您可以避免加入某些子查询,例如,如果其键不适用于加入。

与Union-ED较大数据集一起使用,还可以根据您的设置(例如每个还原器字节(与非常高的并行性一起使用,优化器还可以重写查询计划。因此,我建议您检查两种方法,测量速度,学习计划并检查是否可以更改某些内容。更改,测量,学习计划...重复

还有一些建议:加入之前,请尝试限制数据集。如果您的加入乘以行,则分析和聚合在更大的数据集上的工作速度较慢,并且如果您可以在Union之前应用分析/聚合,则最好是首先方法。

最新更新