Hyunsik Choi created TAJO-1144:
----------------------------------

             Summary: INSERT INTO with output rotation may overwrite previous 
written output file.
                 Key: TAJO-1144
                 URL: https://issues.apache.org/jira/browse/TAJO-1144
             Project: Tajo
          Issue Type: Improvement
          Components: physical operator
            Reporter: Hyunsik Choi
            Assignee: Hyunsik Choi
            Priority: Critical
             Fix For: 0.9.1


Tajo can write multiple output files according to a given maximum file size. We 
can this feature 'output file rotation'.

BTW, INSERT with output file rotation may overwrite the previous written output 
file. See the source code in StoreTableExec.

{noformat}
public void openNewFile(int suffixId) throws IOException {
    String prevFile = null;

    lastFileName = context.getOutputPath();
    if (suffixId > 0) {
      prevFile = lastFileName.toString();

      lastFileName = new Path(lastFileName + "_" + suffixId);
    }

    if (plan instanceof InsertNode) {
      InsertNode createTableNode = (InsertNode) plan;
      appender = 
StorageManager.getStorageManager(context.getConf()).getAppender(meta,
          createTableNode.getTableSchema(), context.getOutputPath());
    } else {
      appender = 
StorageManager.getStorageManager(context.getConf()).getAppender(meta, 
outSchema, lastFileName);
    }

    appender.enableStats();
    appender.init();

    if (suffixId > 0) {
      LOG.info(prevFile + " exceeds " + 
SessionVars.MAX_OUTPUT_FILE_SIZE.keyname() + " (" + maxPerFileSize + " MB), " +
          "The remain output will be written into " + lastFileName.toString());
    }
  }
{noformat}

Especially, {{context.getOutputPath\(\)}} should be lastFileName in the below 
part.
{noformat}
    if (plan instanceof InsertNode) {
      InsertNode createTableNode = (InsertNode) plan;
      appender = 
StorageManager.getStorageManager(context.getConf()).getAppender(meta,
          createTableNode.getTableSchema(), context.getOutputPath());
    } else {
      appender = 
StorageManager.getStorageManager(context.getConf()).getAppender(meta, 
outSchema, lastFileName);
    }
{noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to