You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Grisha Trubetskoy (JIRA)" <ji...@apache.org> on 2015/08/01 01:23:04 UTC

[jira] [Updated] (HIVE-11427) Location of temporary table for CREATE TABLE SELECT broken by HIVE-7079

     [ https://issues.apache.org/jira/browse/HIVE-11427?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Grisha Trubetskoy updated HIVE-11427:
-------------------------------------
    Description: 
If a user _does not_ have HDFS write permissions to the _default_ database, and attempts to create a table in a _private_ database to which the user _does_ have permissions, the following happens:
{code}
create table grisha.blahblah as select * from some_table;
FAILED: SemanticException 0:0 Error creating temporary folder on: hdfs://nn.example.com/user/hive/warehouse. Error encountered near token 'TOK_TMP_FILE’

I've edited this issue because my initial explanation was completely bogus. A more likely explanation is in https://github.com/apache/hive/commit/1614314ef7bd0c3b8527ee32a434ababf7711278
{code}
-                fname = ctx.getExternalTmpPath(
+                fname = ctx.getExtTmpPathRelTo(
{code}

In any event - the bug is that the location chosen for the temporary storage has to be in the same place as the target table because that is where presumably the user running the query would have write permissions to.

  was:
If a user _does not_ have HDFS write permissions to the _default_ database, and attempts to create a table in a _private_ database to which the user _does_ have permissions, the following happens:
{code}
create table grisha.blahblah as select * from some_table;
FAILED: SemanticException 0:0 Error creating temporary folder on: hdfs://nn.example.com/user/hive/warehouse. Error encountered near token 'TOK_TMP_FILE’
{code}
The reason for this seems to be https://github.com/apache/hive/commit/05a2aff71c2682e01331cd333189ce7802233a75#diff-f2040374293a91cbcc6594ee571b20e4L1425, specifically this line: https://github.com/apache/hive/blob/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java#L1787, which changed like this in the aforementioned commit:
{code}
-                location = wh.getDatabasePath(db.getDatabase(newTable.getDbName()));
+                location = wh.getDatabasePath(db.getDatabase(names[0]));
{code}

So before the database of the new table was used, and now the database of the table from the select is used as I understand it.

NB: This was all inferred from just reading the code, I have not verified it.


> Location of temporary table for CREATE TABLE  SELECT broken by HIVE-7079
> ------------------------------------------------------------------------
>
>                 Key: HIVE-11427
>                 URL: https://issues.apache.org/jira/browse/HIVE-11427
>             Project: Hive
>          Issue Type: Bug
>            Reporter: Grisha Trubetskoy
>
> If a user _does not_ have HDFS write permissions to the _default_ database, and attempts to create a table in a _private_ database to which the user _does_ have permissions, the following happens:
> {code}
> create table grisha.blahblah as select * from some_table;
> FAILED: SemanticException 0:0 Error creating temporary folder on: hdfs://nn.example.com/user/hive/warehouse. Error encountered near token 'TOK_TMP_FILE’
> I've edited this issue because my initial explanation was completely bogus. A more likely explanation is in https://github.com/apache/hive/commit/1614314ef7bd0c3b8527ee32a434ababf7711278
> {code}
> -                fname = ctx.getExternalTmpPath(
> +                fname = ctx.getExtTmpPathRelTo(
> {code}
> In any event - the bug is that the location chosen for the temporary storage has to be in the same place as the target table because that is where presumably the user running the query would have write permissions to.



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