@Override
  public List<PlanNode> visitSemiJoin(SemiJoinNode node, PlanContext context) {
    List<PlanNode> leftChildrenNodes = node.getLeftChild().accept(this, context);
    List<PlanNode> rightChildrenNodes = node.getRightChild().accept(this, context);
    checkArgument(
        leftChildrenNodes.size() == 1,
        "The size of left children node of SemiJoinNode should be 1");
    checkArgument(
        rightChildrenNodes.size() == 1,
        "The size of right children node of SemiJoinNode should be 1");
    node.setLeftChild(leftChildrenNodes.get(0));
    node.setRightChild(rightChildrenNodes.get(0));
    return Collections.singletonList(node);
  }
This class is used to generate distributed plan for table model.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributedPlanGenerator.java