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

Peter Vary commented on HIVE-26882:
-----------------------------------

{quote}The issue is each alter table operation updates more than just the 
metadata location. For example, when we change iceberg table schema, JDO will 
update both the iceberg metadata location, and the HMS storage descriptor. If 
we use direct SQL, then either we follow JDO to generate all the SQL 
statements, or we allow storage descriptor to be out of sync with iceberg 
metadata.
{quote}
If the first transaction updates the metadata location, then the second 
transaction will fails to update the metadata location, and the second 
transaction is rolled back. So I think the state will be consistent in this 
regard.
We might have a conflict with other transactions which do not update the 
metadata location, but that could happen anyways.
Do I miss something?

{quote}Not sure I understand the question. You can execute multiple update 
statements in the transaction and check the affected rows for each of them. In 
our PoC, we update current and previous metadata location, and leave all other 
fields out of sync.{quote}

I'm trying to suggest to use the direct SQL to update the metadata location 
only, and keep the other parts of the code intact. I think this would be enough 
to prevent concurrent updates of the table.

[~maswin]: Could you please help us try out the proposed solution with Oracle?

> Allow transactional check of Table parameter before altering the Table
> ----------------------------------------------------------------------
>
>                 Key: HIVE-26882
>                 URL: https://issues.apache.org/jira/browse/HIVE-26882
>             Project: Hive
>          Issue Type: Improvement
>          Components: Standalone Metastore
>            Reporter: Peter Vary
>            Assignee: Peter Vary
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 2.3.10, 4.0.0-beta-1
>
>          Time Spent: 4h 40m
>  Remaining Estimate: 0h
>
> We should add the possibility to transactionally check if a Table parameter 
> is changed before altering the table in the HMS.
> This would provide an alternative, less error-prone and faster way to commit 
> an Iceberg table, as the Iceberg table currently needs to:
> - Create an exclusive lock
> - Get the table metadata to check if the current snapshot is not changed
> - Update the table metadata
> - Release the lock
> After the change these 4 HMS calls could be substituted with a single alter 
> table call.
> Also we could avoid cases where the locks are left hanging by failed processes



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to