[
https://issues.apache.org/jira/browse/HIVE-26385?focusedWorklogId=793013&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-793013
]
ASF GitHub Bot logged work on HIVE-26385:
-----------------------------------------
Author: ASF GitHub Bot
Created on: 20/Jul/22 04:04
Start Date: 20/Jul/22 04:04
Worklog Time Spent: 10m
Work Description: kasakrisz commented on code in PR #3430:
URL: https://github.com/apache/hive/pull/3430#discussion_r925153504
##########
ql/src/java/org/apache/hadoop/hive/ql/parse/UpdateDeleteSemanticAnalyzer.java:
##########
@@ -285,30 +278,11 @@ private void analyzeSplitUpdate(ASTNode tree, Table
mTable, ASTNode tabNameNode)
rewrittenQueryStr.append("(SELECT ");
boolean nonNativeAcid = AcidUtils.isNonNativeAcidTable(mTable);
- int columnOffset;
- List<String> deleteValues;
- if (nonNativeAcid) {
- List<FieldSchema> acidSelectColumns =
mTable.getStorageHandler().acidSelectColumns(mTable, operation);
- deleteValues = new ArrayList<>(acidSelectColumns.size());
- for (FieldSchema fieldSchema : acidSelectColumns) {
- String identifier = HiveUtils.unparseIdentifier(fieldSchema.getName(),
this.conf);
- rewrittenQueryStr.append(identifier).append(" AS ");
- String prefixedIdentifier = HiveUtils.unparseIdentifier(DELETE_PREFIX
+ fieldSchema.getName(), this.conf);
- rewrittenQueryStr.append(prefixedIdentifier);
- rewrittenQueryStr.append(",");
- deleteValues.add(String.format("%s.%s", SUB_QUERY_ALIAS,
prefixedIdentifier));
- }
-
- columnOffset = acidSelectColumns.size();
- } else {
- rewrittenQueryStr.append("ROW__ID,");
- deleteValues = new ArrayList<>(1 + mTable.getPartCols().size());
- deleteValues.add(SUB_QUERY_ALIAS + ".ROW__ID");
- for (FieldSchema fieldSchema : mTable.getPartCols()) {
- deleteValues.add(SUB_QUERY_ALIAS + "." +
HiveUtils.unparseIdentifier(fieldSchema.getName(), conf));
- }
- columnOffset = 1;
- }
+ ColumnAppender columnAppender = nonNativeAcid ? new
NonNativeAcidColumnAppender(mTable, conf, SUB_QUERY_ALIAS) :
+ new NativeAcidColumnAppender(mTable, conf, SUB_QUERY_ALIAS);
Review Comment:
I prefer keeping this in `RewriteSemanticAnalyzer` because these classes are
used for generating query text when rewriting updates and merges.
Added a factory method:
```
protected ColumnAppender getColumnAppender(String subQueryAlias)
```
Issue Time Tracking
-------------------
Worklog Id: (was: 793013)
Time Spent: 1.5h (was: 1h 20m)
> Iceberg integration: Implement merge into iceberg table
> -------------------------------------------------------
>
> Key: HIVE-26385
> URL: https://issues.apache.org/jira/browse/HIVE-26385
> Project: Hive
> Issue Type: Improvement
> Components: File Formats
> Reporter: Krisztian Kasa
> Assignee: Krisztian Kasa
> Priority: Major
> Labels: pull-request-available
> Fix For: 4.0.0
>
> Time Spent: 1.5h
> Remaining Estimate: 0h
>
> {code}
> create external table target_ice(a int, b string, c int) partitioned by spec
> (bucket(16, a), truncate(3, b)) stored by iceberg stored as orc tblproperties
> ('format-version'='2');
> create table source(a int, b string, c int);
> ...
> merge into target_ice as t using source src ON t.a = src.a
> when matched and t.a > 100 THEN DELETE
> when matched then update set b = 'Merged', c = t.c + 10
> when not matched then insert values (src.a, src.b, src.c);
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)