You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hawq.apache.org by "Michael Andre Pearce (IG) (JIRA)" <ji...@apache.org> on 2016/06/10 23:52:21 UTC

[jira] [Comment Edited] (HAWQ-304) Support update and delete on non-heap tables

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

Michael Andre Pearce (IG) edited comment on HAWQ-304 at 6/10/16 11:51 PM:
--------------------------------------------------------------------------

Hi Guys, 

Whilst we wait for this feature, we've made a very rudimentary work around that manages to give the effect/simulate a mutable table (update and delete). 

Ive attached a sample so others can re-use if they wish.

For simulating UPDATE we just append and simply have a bigserial incrementing as update_version for each row key. At query time we select the latest version by key.

For simulating DELETE we have a field that marks if the latest update_version for a key is actually a delete. At query time we remove deleted fields from the select.

For clean-ness we wrap the above in a view which hides the extra columns and keeps normal SELECT queries clean from the logic a little.

We also have a compacting phase we run separately a CTAS which re-creates the table using a SELECT on the view, essentially giving the latest and removing previous iterations and change depth.

It seems this works relatively ok, and for updates/deletes works quite fast too.

Issues we have is that as no way to lock during the compaction if a query occurs when we run that, we can get undesired effects. We manage this by running at a quiet period. Any idea's how we could make this safer? And or faster/less intensive? 

Also we wonder if there is a more efficient way of doing the select in the view to get latest row version for a key?

Cheers 
Mike





was (Author: michael.andre.pearce):
Hi Guys, 

Whilst we wait for this feature, we've made a very rudimentary work around that manages to give the effect/simulate a mutable table (update and delete). 

Ive attached a sample so others can re-use if they wish.

For simulating UPDATE we just append and simply re have a bigserial incrementing as update_version and for each row key. At query time we select the latest version by key.

For simulating DELETE we have a field that marks if the latest version is actually a delete. At query time we remove deleted fields from the select.

For clean-ness we wrap the above in a view which hides the extra columns and keeps normal SELECT queries clean from the logic a little.

We also have a compacting phase we run separately a CTAS which re-creates the table using a SELECT on the view, essentially giving the latest and removing previous iterations and change depth.

It seems this works relatively ok, and for updates/deletes works quite fast too.

Issues we have is that as no way to lock during the compaction if a query occurs when we run that, we can get undesired effects. We manage this by running at a quiet period. Any idea's how we could make this safer? And or faster/less intensive? 

Also we wonder if there is a more efficient way of doing the select in the view to get latest row version for a key?

Cheers 
Mike




> Support update and delete on non-heap tables
> --------------------------------------------
>
>                 Key: HAWQ-304
>                 URL: https://issues.apache.org/jira/browse/HAWQ-304
>             Project: Apache HAWQ
>          Issue Type: New Feature
>          Components: Storage
>            Reporter: Lei Chang
>             Fix For: 3.0.0
>
>         Attachments: mutable_table.sql
>
>




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