HPCC ECL中LOCAL与LOOKUP JOIN联用的数据集分布及匹配问题
HPCC ECL JOIN(LOOKUP+LOCAL)操作的疑问解答
背景环境与执行代码
集群规模:400台机器
数据集:
some_dataset_1:1亿条记录some_dataset_2:100万条记录
执行代码:
// 定义数据分布 ds1 := DISTRIBUTE(some_dataset_1, hash(field_a)); ds2 := DISTRIBUTE(some_dataset_2, hash(field_b)); // 执行关联操作 j1 := JOIN(ds1, ds2, LEFT.field_a = LEFT.field_b, LOOKUP, LOCAL);
疑问1:ds2的分布式存储是否会破坏关联,导致片段错误分散在集群中,降低匹配率?
不会。结合LOOKUP与LOCAL的特性,LOCAL要求关联在各节点独立执行,但LOOKUP会将右侧数据集(ds2)全量复制到每个计算节点。也就是说,每个节点在处理本地分片的ds1时,都能访问到完整的ds2数据集进行匹配,不会因ds2的哈希分散存储导致匹配片段缺失,匹配率不会受影响。
疑问2:是否LOOKUP关键字优先级更高,分布式的ds2会被全量复制到每个节点,使原有分布无关,从而保证找到所有可能匹配?
是的。根据HPCC ECL v7.0.0语言参考文档:
LOOKUP指定右侧数据集为可全量复制到每个节点的小型查找文件;LOCAL指定操作在各节点独立执行,维持之前的DISTRIBUTE分布。
LOOKUP的特性优先于ds2原有的分布式策略:即使ds2已按hash(field_b)分片存储,LOOKUP会强制将完整的ds2复制到集群的每个节点。此时每个节点执行本地关联时,都能使用完整的ds2与本地ds1分片匹配,原有ds2的分布逻辑不再影响关联结果,确保所有潜在匹配都能被找到。
测试验证情况
初步测试显示,LOCAL关键字确实提升了关联操作的执行速度,且未出现匹配丢失的情况,目前正在开展更全面的测试以验证结果稳定性。
内容的提问来源于stack exchange,提问作者Gabriel Marcan
相关产品推荐
相关产品推荐

