You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Eugene Koifman (JIRA)" <ji...@apache.org> on 2018/09/17 23:15:00 UTC

[jira] [Commented] (HIVE-16812) VectorizedOrcAcidRowBatchReader doesn't filter delete events

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

Eugene Koifman commented on HIVE-16812:
---------------------------------------

The above is not quite correct.
The {{hive.acid.key.index}} is in the file footer an records the last (largest) ROW__ID of each stripe.
We'd need to know from the split info which stripe this is (it's ordinal position in the file) to find the right place in this index.

Alternatively, we could build the index differently (make each entry include stripe's byte offset or some other identifying info).
This would not be as good since it will not be usable for files written before this change.

> VectorizedOrcAcidRowBatchReader doesn't filter delete events
> ------------------------------------------------------------
>
>                 Key: HIVE-16812
>                 URL: https://issues.apache.org/jira/browse/HIVE-16812
>             Project: Hive
>          Issue Type: Improvement
>          Components: Transactions
>    Affects Versions: 2.3.0
>            Reporter: Eugene Koifman
>            Assignee: Eugene Koifman
>            Priority: Critical
>
> the c'tor of VectorizedOrcAcidRowBatchReader has
> {noformat}
>     // Clone readerOptions for deleteEvents.
>     Reader.Options deleteEventReaderOptions = readerOptions.clone();
>     // Set the range on the deleteEventReaderOptions to 0 to INTEGER_MAX because
>     // we always want to read all the delete delta files.
>     deleteEventReaderOptions.range(0, Long.MAX_VALUE);
> {noformat}
> This is suboptimal since base and deltas are sorted by ROW__ID.  So for each split if base we can find min/max ROW_ID and only load events from delta that are in [min,max] range.  This will reduce the number of delete events we load in memory (to no more than there in the split).
> When we support sorting on PK, the same should apply but we'd need to make sure to store PKs in ORC index
> See {{OrcRawRecordMerger.discoverKeyBounds()}}
> {{hive.acid.key.index}} in Orc footer has an index of ROW__IDs so we should know min/max easily for any file written by {{OrcRecordUpdater}}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)