drill-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DRILL-4956) Temporary tables support
Date Thu, 05 Jan 2017 02:34:58 GMT

    [ https://issues.apache.org/jira/browse/DRILL-4956?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15800061#comment-15800061
] 

ASF GitHub Bot commented on DRILL-4956:
---------------------------------------

Github user paul-rogers commented on a diff in the pull request:

    https://github.com/apache/drill/pull/666#discussion_r94689164
  
    --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/CreateTableHandler.java
---
    @@ -67,43 +71,64 @@ public CreateTableHandler(SqlHandlerConfig config, Pointer<String>
textPlan) {
       @Override
       public PhysicalPlan getPlan(SqlNode sqlNode) throws ValidationException, RelConversionException,
IOException, ForemanSetupException {
         SqlCreateTable sqlCreateTable = unwrap(sqlNode, SqlCreateTable.class);
    -    final String newTblName = sqlCreateTable.getName();
    +    String originalTableName = sqlCreateTable.getName();
     
         final ConvertedRelNode convertedRelNode = validateAndConvert(sqlCreateTable.getQuery());
         final RelDataType validatedRowType = convertedRelNode.getValidatedRowType();
         final RelNode queryRelNode = convertedRelNode.getConvertedNode();
     
    -
         final RelNode newTblRelNode =
             SqlHandlerUtil.resolveNewTableRel(false, sqlCreateTable.getFieldNames(), validatedRowType,
queryRelNode);
     
    +    final String temporaryWorkspace = context.getConfig().getString(ExecConstants.DEFAULT_TEMPORARY_WORKSPACE);
    +
         final AbstractSchema drillSchema =
             SchemaUtilites.resolveToMutableDrillSchema(config.getConverter().getDefaultSchema(),
    -            sqlCreateTable.getSchemaPath());
    -    final String schemaPath = drillSchema.getFullSchemaName();
    +                getSchemaPath(sqlCreateTable, temporaryWorkspace));
    +
    +    boolean isTemporaryWorkspace = drillSchema.getFullSchemaName().equals(temporaryWorkspace);
     
    -    if (SqlHandlerUtil.getTableFromSchema(drillSchema, newTblName) != null) {
    -      throw UserException.validationError()
    -          .message("A table or view with given name [%s] already exists in schema [%s]",
newTblName, schemaPath)
    +    if (sqlCreateTable.isTemporary() && !isTemporaryWorkspace) {
    +      throw UserException
    +          .validationError()
    +          .message(String.format("Temporary tables are not allowed to be created " +
    +              "outside of default temporary workspace [%s] defined by [%s] " +
    +              "configuration parameter", temporaryWorkspace, ExecConstants.DEFAULT_TEMPORARY_WORKSPACE))
               .build(logger);
         }
     
    -    final RelNode newTblRelNodeWithPCol = SqlHandlerUtil.qualifyPartitionCol(newTblRelNode,
sqlCreateTable.getPartitionColumns());
    +    checkDuplicatedObjectExistence(drillSchema, originalTableName, isTemporaryWorkspace,
context.getSession());
     
    -    log("Calcite", newTblRelNodeWithPCol, logger, null);
    +    final RelNode newTblRelNodeWithPCol = SqlHandlerUtil.qualifyPartitionCol(newTblRelNode,
    +        sqlCreateTable.getPartitionColumns());
     
    +    log("Calcite", newTblRelNodeWithPCol, logger, null);
         // Convert the query to Drill Logical plan and insert a writer operator on top.
    -    DrillRel drel = convertToDrel(newTblRelNodeWithPCol, drillSchema, newTblName, sqlCreateTable.getPartitionColumns(),
newTblRelNode.getRowType());
    +    StorageStrategy storageStrategy = sqlCreateTable.isTemporary() ?
    +        StorageStrategy.TEMPORARY : StorageStrategy.PERSISTENT;
    +    String newTableName = sqlCreateTable.isTemporary() ?
    --- End diff --
    
    Perhaps a comment to explain how the new table name differs from the original table name.
Reason: can the new name conflict with other table names in the query? If I had A, B and A
is a temp table, can the new name turn out to be B which collides with the existing B?


> Temporary tables support
> ------------------------
>
>                 Key: DRILL-4956
>                 URL: https://issues.apache.org/jira/browse/DRILL-4956
>             Project: Apache Drill
>          Issue Type: Improvement
>    Affects Versions: 1.8.0
>            Reporter: Arina Ielchiieva
>            Assignee: Arina Ielchiieva
>              Labels: doc-impacting
>             Fix For: Future
>
>
> Link to design doc - https://docs.google.com/document/d/1gSRo_w6q2WR5fPx7SsQ5IaVmJXJ6xCOJfYGyqpVOC-g/edit



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

Mime
View raw message