private void makeAcid(Table newTable) throws MetaException {
    if(newTable.getParameters() != null &&
        newTable.getParameters().containsKey(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL)) {
      LOG.info("Could not make " + Warehouse.getQualifiedName(newTable) + " acid: already has " +
          hive_metastoreConstants.TABLE_IS_TRANSACTIONAL + "=" +
          newTable.getParameters().get(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL));
      return;
    }

    Configuration conf = getConf();
    boolean makeAcid =
        //no point making an acid table if these other props are not set since it will just throw
        //exceptions when someone tries to use the table.
        MetastoreConf.getBoolVar(conf, MetastoreConf.ConfVars.CREATE_TABLES_AS_ACID) &&
        MetastoreConf.getBoolVar(conf, MetastoreConf.ConfVars.HIVE_SUPPORT_CONCURRENCY) &&
        "org.apache.hadoop.hive.ql.lockmgr.DbTxnManager".equals(
            MetastoreConf.getVar(conf, MetastoreConf.ConfVars.HIVE_TXN_MANAGER)
        );

    if(makeAcid) {
      if(!conformToAcid(newTable)) {
        LOG.info("Could not make " + Warehouse.getQualifiedName(newTable) + " acid: wrong IO format");
        return;
      }
      if(!TableType.MANAGED_TABLE.toString().equalsIgnoreCase(newTable.getTableType())) {
        //todo should this check be in conformToAcid()?
        LOG.info("Could not make " + Warehouse.getQualifiedName(newTable) + " acid: it's " +
            newTable.getTableType());
        return;
      }
      if(newTable.getSd().getSortColsSize() > 0) {
        LOG.info("Could not make " + Warehouse.getQualifiedName(newTable) + " acid: it's sorted");
        return;
      }
      //check if orc and not sorted
      Map<String, String> parameters = newTable.getParameters();
      if (parameters == null || parameters.isEmpty()) {
        parameters = new HashMap<>();
      }
      parameters.put(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL, "true");
      newTable.setParameters(parameters);
      LOG.info("Automatically chose to make " + Warehouse.getQualifiedName(newTable) + " acid.");
    }
  }
Want to make a a newly create table Acid (unless it explicitly has transactional=false param)
if table can support it.  Also see SemanticAnalyzer.addDefaultProperties() which performs the
same logic.  This code path is more general since it is activated even if you create a table
via Thrift, WebHCat etc but some operations like CTAS create the table (metastore object) as
the last step (i.e. after the data is written) but write itself is has to be aware of the type
of table so this Listener is too late.
standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/TransactionalValidationListener.java