deniskuzZ commented on code in PR #4573:
URL: https://github.com/apache/hive/pull/4573#discussion_r1384560804


##########
iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergMetaHook.java:
##########
@@ -966,14 +970,31 @@ private boolean 
isOrcOnlyFiles(org.apache.hadoop.hive.metastore.api.Table hmsTab
   }
 
   // TODO: remove this if copy-on-write mode gets implemented in Hive
-  private static void setDeleteModeOnTableProperties(Table icebergTable, 
Map<String, String> newProps) {
+  private void setDeleteModeOnTableProperties(Table icebergTbl, Map<String, 
String> newProps,
+      EnvironmentContext context) {
     // Hive only supports merge-on-read delete mode, it will actually throw an 
error if DML operations are attempted on
     // tables that don't have this (the default is copy-on-write). We set this 
at table creation and v1->v2 conversion.
-    if ((icebergTable == null || ((BaseTable) 
icebergTable).operations().current().formatVersion() == 1) &&
+    if ((icebergTbl == null || ((BaseTable) 
icebergTbl).operations().current().formatVersion() == 1) &&
         IcebergTableUtil.isV2Table(newProps)) {
-      newProps.put(TableProperties.DELETE_MODE, 
HiveIcebergStorageHandler.MERGE_ON_READ);
-      newProps.put(TableProperties.UPDATE_MODE, 
HiveIcebergStorageHandler.MERGE_ON_READ);
-      newProps.put(TableProperties.MERGE_MODE, 
HiveIcebergStorageHandler.MERGE_ON_READ);
+      List<String> writeModeList = Arrays.asList(DELETE_MODE, UPDATE_MODE, 
MERGE_MODE);
+      writeModeList.stream()
+          .filter(writeMode -> catalogProperties.get(writeMode) == null)
+          .forEach(writeMode -> {
+            catalogProperties.put(writeMode, 
HiveIcebergStorageHandler.MERGE_ON_READ);
+            newProps.put(writeMode, HiveIcebergStorageHandler.MERGE_ON_READ);
+          });
+
+      if (context != null) {
+        Splitter splitter = Splitter.on(PROPERTIES_SEPARATOR);
+        Map<String, String> contextProperties = context.getProperties();
+        if (contextProperties.containsKey(SET_PROPERTIES)) {
+          final String[] propValue = 
{context.getProperties().get(SET_PROPERTIES)};
+          writeModeList.stream()
+              .filter(writeMode -> 
!splitter.splitToList(propValue[0]).contains(writeMode))
+              .map(writeMode -> propValue[0] += "'" + writeMode)

Review Comment:
   👍 looks better



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: gitbox-unsubscr...@hive.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: gitbox-unsubscr...@hive.apache.org
For additional commands, e-mail: gitbox-h...@hive.apache.org

Reply via email to