@Override
  public Analysis visitInsertMultiTablets(
      InsertMultiTabletsStatement insertMultiTabletsStatement, MPPQueryContext context) {
    context.setQueryType(QueryType.WRITE);
    insertMultiTabletsStatement.semanticCheck();
    Analysis analysis = new Analysis();
    validateSchema(
        analysis,
        insertMultiTabletsStatement,
        () -> SchemaValidator.validate(schemaFetcher, insertMultiTabletsStatement, context));
    InsertMultiTabletsStatement realStatement =
        (InsertMultiTabletsStatement) removeLogicalView(analysis, insertMultiTabletsStatement);
    if (analysis.isFinishQueryAfterAnalyze()) {
      return analysis;
    }
    analysis.setRealStatement(realStatement);

    AnalyzeUtils.analyzeDataPartition(
        analysis,
        AnalyzeUtils.computeTreeDataPartitionParams(realStatement, context),
        context.getSession().getUserName(),
        partitionFetcher::getOrCreateDataPartition);
    return analysis;
  }
Check datatype consistency in ALIGN BY DEVICE.

<p>an inconsistent example: select s0 from root.sg1.d1, root.sg1.d2 align by device, return
false while root.sg1.d1.s0 is INT32 and root.sg1.d2.s0 is FLOAT.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java