[ https://issues.apache.org/jira/browse/HIVE-10209?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Chao updated HIVE-10209: ------------------------ Attachment: HIVE-10209-1.spark.patch Looks like it's hard to change ExecMapper.done to be non-static. This patch set it to false when initializing a FetchTask. > 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 > Assignee: Chao > Attachments: HIVE-10209-1.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. > 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)