[
https://issues.apache.org/jira/browse/HIVE-10209?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Xuefu Zhang updated HIVE-10209:
-------------------------------
Fix Version/s: (was: spark-branch)
1.2.0
> FetchTask with VC may fail because ExecMapper.done is true
> ----------------------------------------------------------
>
> Key: HIVE-10209
> URL: https://issues.apache.org/jira/browse/HIVE-10209
> Project: Hive
> Issue Type: Bug
> Components: Query Processor
> Affects Versions: 1.1.0
> Reporter: Chao Sun
> Assignee: Chao Sun
> Fix For: 1.2.0
>
> Attachments: HIVE-10209.1-spark.patch, HIVE-10209.2-spark.patch
>
>
> ExecMapper.done is a static variable, and may cause issues in the following
> example:
> {code}
> set hive.fetch.task.conversion=minimal;
> select * from src where key < 10 limit 1;
> set hive.fetch.task.conversion=more;
> select *, BLOCK__OFFSET_INSIDE__FILE from src where key < 10;
> {code}
> The second select won't return any result, if running in local mode.
> The issue is, the first select query will be converted to a MapRedTask with
> only a mapper. And, when the task is done, because of the limit operator,
> ExecMapper.done will be set to true.
> Then, when the second select query begin to execute, it will call
> {{FetchOperator::getRecordReader()}}, and since here we have virtual column,
> an instance of {{HiveRecordReader}} will be returned. The problem is,
> {{HiveRecordReader::doNext()}} will check ExecMapper.done. In this case,
> since the value is true, it will quit immediately.
> In short, I think making ExecMapper.done static is a bad idea. The first
> query should in no way affect the second one.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)