ClickHouse多表关联时join算法的设置位置与规则咨询
ClickHouse多表关联的JOIN算法设置问题解答
join算法设置应放在每个关联后还是查询末尾?
两种位置都支持:如果所有关联想用同一种算法,直接把SETTINGS放在查询末尾更简洁;如果需要给不同关联指定不同算法,就得在每个JOIN的语句后单独加SETTINGS。仅在查询末尾设置是否对两次关联都生效?
是的。查询末尾的SETTINGS属于全局配置,会覆盖默认值,作用于整个查询里的所有JOIN操作。比如你在最后设置join_algorithm = 'full_sorting_merge',那么table1和table2、table1和table3的关联都会用这个排序合并连接算法。能否为每个关联指定不同的join算法?
当然可以。ClickHouse支持为单个JOIN单独配置算法,只需要在对应JOIN的语句块后添加SETTINGS子句。举个贴合你场景的示例:SELECT * FROM db1.table1 LEFT JOIN db1.table2 ON table1.order_key = table2.order_key SETTINGS join_algorithm = 'full_sorting_merge', max_bytes_before_external_sort = 0 LEFT JOIN db1.table3 ON table1.order_key = table3.order_key SETTINGS join_algorithm = 'hash';这个语句里,table1和table2用你原本需要的排序合并连接,table1和table3则用哈希连接,两者的设置互不干扰。
内容的提问来源于stack exchange,提问作者Alexandr
相关产品推荐
相关产品推荐

