rdblue commented on code in PR #9596:
URL: https://github.com/apache/iceberg/pull/9596#discussion_r1473187177


##########
spark/v3.5/spark/src/main/java/org/apache/iceberg/spark/SparkCatalog.java:
##########
@@ -608,6 +608,53 @@ public View createView(
         "Creating a view is not supported by catalog: " + catalogName);
   }
 
+  @Override
+  public View replaceView(
+      Identifier ident,
+      String sql,
+      String currentCatalog,
+      String[] currentNamespace,
+      StructType schema,
+      String[] queryColumnNames,
+      String[] columnAliases,
+      String[] columnComments,
+      Map<String, String> properties)
+      throws NoSuchViewException, NoSuchNamespaceException {
+    if (null != asViewCatalog) {
+      Schema icebergSchema = SparkSchemaUtil.convert(schema);
+
+      StringJoiner joiner = new StringJoiner(",");
+      Arrays.stream(queryColumnNames).forEach(joiner::add);
+
+      try {
+        Map<String, String> props =
+            ImmutableMap.<String, String>builder()
+                .putAll(Spark3Util.rebuildCreateProperties(properties))
+                .put("queryColumnNames", joiner.toString())
+                .build();
+
+        org.apache.iceberg.view.View view =
+            asViewCatalog
+                .buildView(buildIdentifier(ident))
+                .withDefaultCatalog(currentCatalog)
+                .withDefaultNamespace(Namespace.of(currentNamespace))
+                .withQuery("spark", sql)
+                .withSchema(icebergSchema)

Review Comment:
   This works, but we may want to handle field IDs differently in the future. 
Because there are no data files, it doesn't really matter how we assign IDs, 
but it is nice to have consistent IDs across schema versions because it could 
be confusing otherwise.
   
   The table implementation keeps schemas consistent for replace table 
operations by passing the previous schema in to assign the new IDs, like this:
   
   ```java
       Schema freshSchema =
           TypeUtil.assignFreshIds(updatedSchema, schema(), 
newLastColumnId::incrementAndGet);
   ```
   
   This would be a separate PR if we wanted to handle it in `ViewMetadata`.



-- 
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: issues-unsubscr...@iceberg.apache.org

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


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

Reply via email to