private static NodeRelation getNodeRelation(TemporalJoinerDefinition joinerDefinition, NodeRelation nodeRelation) {
        JoinMode joinMode = joinerDefinition.getJoinMode();
        String leftNode = getNodeName(joinerDefinition.getLeftNode());
        String rightNode = getNodeName(joinerDefinition.getRightNode());
        List<String> preNodes = Lists.newArrayList(leftNode, rightNode);
        List<StreamField> leftJoinFields = joinerDefinition.getLeftJoinFields();
        List<StreamField> rightJoinFields = joinerDefinition.getRightJoinFields();
        List<FilterFunction> filterFunctions = Lists.newArrayList();
        for (int index = 0; index < leftJoinFields.size(); index++) {
            StreamField leftField = leftJoinFields.get(index);
            StreamField rightField = rightJoinFields.get(index);
            LogicOperator operator;
            if (index != 0) {
                operator = AndOperator.getInstance();
            } else {
                operator = EmptyOperator.getInstance();
            }
            filterFunctions.add(createFilterFunction(leftField, rightField, operator));
        }
        Map<String, List<FilterFunction>> joinConditions = new HashMap<>();
        joinConditions.put(rightNode, filterFunctions);
        switch (joinMode) {
            case LEFT_JOIN:
                return new LeftOuterJoinNodeRelation(preNodes, nodeRelation.getOutputs(), joinConditions);
            case INNER_JOIN:
                return new InnerJoinNodeRelation(preNodes, nodeRelation.getOutputs(), joinConditions);
            case RIGHT_JOIN:
                return new RightOuterJoinNodeRelation(preNodes, nodeRelation.getOutputs(), joinConditions);
            default:
                throw new IllegalArgumentException(String.format("Unsupported join mode=%s for inlong", joinMode));
        }
    }
Optimize relation of node, JoinerRelation must be rebuilt.
inlong-manager/manager-pojo/src/main/java/org/apache/inlong/manager/pojo/sort/util/NodeRelationUtils.java