From 1cadfc7c0e53b8959aad44053a5a4fd017089a09 Mon Sep 17 00:00:00 2001 From: Ryan Blue Date: Fri, 31 Jul 2020 13:42:40 -0700 Subject: [PATCH] Fix Spark 3 describe with IN predicates. --- .../main/java/org/apache/iceberg/spark/Spark3Util.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/spark3/src/main/java/org/apache/iceberg/spark/Spark3Util.java b/spark3/src/main/java/org/apache/iceberg/spark/Spark3Util.java index 03d39bed263b..03a4ea5670cb 100644 --- a/spark3/src/main/java/org/apache/iceberg/spark/Spark3Util.java +++ b/spark3/src/main/java/org/apache/iceberg/spark/Spark3Util.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import org.apache.iceberg.PartitionSpec; import org.apache.iceberg.Schema; import org.apache.iceberg.TableProperties; @@ -517,11 +518,19 @@ public String predicate(UnboundPredicate pred) { return pred.ref().name() + " != " + sqlString(pred.literal()); case STARTS_WITH: return pred.ref().name() + " LIKE '" + pred.literal() + "%'"; + case IN: + return pred.ref().name() + " IN (" + sqlString(pred.literals()) + ")"; + case NOT_IN: + return pred.ref().name() + " NOT IN (" + sqlString(pred.literals()) + ")"; default: throw new UnsupportedOperationException("Cannot convert predicate to SQL: " + pred); } } + private static String sqlString(List> literals) { + return literals.stream().map(DescribeExpressionVisitor::sqlString).collect(Collectors.joining(", ")); + } + private static String sqlString(org.apache.iceberg.expressions.Literal lit) { if (lit.value() instanceof String) { return "'" + lit.value() + "'";