private void insertRelationalTabletOnce(Map<SessionConnection, Tablet> relationalTabletGroup)
      throws IoTDBConnectionException, StatementExecutionException {
    Map.Entry<SessionConnection, Tablet> entry = relationalTabletGroup.entrySet().iterator().next();
    SessionConnection connection = entry.getKey();
    Tablet tablet = entry.getValue();
    TSInsertTabletReq request = genTSInsertTabletReq(tablet, false, false);
    request.setWriteToTable(true);
    request.setColumnCategories(
        tablet.getColumnTypes().stream().map(t -> (byte) t.ordinal()).collect(Collectors.toList()));
    try {
      connection.insertTablet(request);
    } catch (RedirectException e) {
      List<TEndPoint> endPointList = e.getEndPointList();
      Map<IDeviceID, TEndPoint> endPointMap = new HashMap<>();
      for (int i = 0; i < endPointList.size(); i++) {
        if (endPointList.get(i) != null) {
          endPointMap.put(tablet.getDeviceID(i), endPointList.get(i));
        }
      }
      endPointMap.forEach(this::handleRedirection);
    } catch (IoTDBConnectionException e) {
      if (endPointToSessionConnection != null && endPointToSessionConnection.size() > 1) {
        // remove the broken session
        removeBrokenSessionConnection(connection);
        try {
          defaultSessionConnection.insertTablet(request);
        } catch (RedirectException ignored) {
        }
      } else {
        throw e;
      }
    }
  }
insert a relational Tablet. Note: This method is for internal use only, we do not guarantee
compatibility with subsequent versions.

@param tablet data batch
iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java