private void validateTable() throws InvalidTable, ConnectionError {
    try {
      tableObject = new Table(getMSC().getTable(database, table));
    } catch (Exception e) {
      LOG.warn("Unable to validate the table for connection: " + toConnectionInfoString(), e);
      throw new InvalidTable(database, table, e);
    }
    // 1 - check that the table is Acid
    if (!AcidUtils.isFullAcidTable(tableObject)) {
      LOG.error("HiveEndPoint " + this + " must use an acid table");
      throw new InvalidTable(database, table, "is not an Acid table");
    }

    if (tableObject.getPartitionKeys() != null && !tableObject.getPartitionKeys().isEmpty()) {
      setPartitionedTable(true);
    } else {
      setPartitionedTable(false);
    }

    // partition values are specified on non-partitioned table
    if (!isPartitionedTable() && (staticPartitionValues != null && !staticPartitionValues.isEmpty())) {
      // Invalid if table is not partitioned, but endPoint's partitionVals is not empty
      String errMsg = this.toString() + " specifies partitions for un-partitioned table";
      LOG.error(errMsg);
      throw new ConnectionError(errMsg);
    }

    // batch size is only used for managed transactions, not for unmanaged single transactions
    if (transactionBatchSize > 1) {
      try (FileSystem fs = tableObject.getDataLocation().getFileSystem(conf)) {
        if (BlobStorageUtils.isBlobStorageFileSystem(conf, fs)) {
          // currently not all filesystems implement StreamCapabilities, while FSDataOutputStream does
          Path path = new Path("/tmp", "_tmp_stream_verify_" + UUID.randomUUID().toString());
          try(FSDataOutputStream out = fs.create(path, false)){
            if (!out.hasCapability(StreamCapabilities.HFLUSH)) {
              throw new ConnectionError(
                  "The backing filesystem only supports transaction batch sizes of 1, but " + transactionBatchSize
                      + " was requested.");
            }
            fs.deleteOnExit(path);
          } catch (IOException e){
            throw new ConnectionError("Could not create path for database", e);
          }
        }
      } catch (IOException e) {
        throw new ConnectionError("Could not retrieve FileSystem of table", e);
      }
    }
  }
Returns the file that would be used to store rows under this.
parameters
@param partitionValues partition values
@param bucketId bucket id
@param minWriteId min write Id
@param maxWriteId max write Id
@param statementId statement Id
@return the location of the file.
@throws StreamingException when the path is not found
streaming/src/java/org/apache/hive/streaming/HiveStreamingConnection.java