You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by bl...@apache.org on 2020/08/11 16:58:41 UTC
[iceberg] 07/09: Spark: Fix Spark 3 describe with IN predicates
(#1283)
This is an automated email from the ASF dual-hosted git repository.
blue pushed a commit to branch 0.9.x
in repository https://gitbox.apache.org/repos/asf/iceberg.git
commit f3242b4394063a1899be096d4cb027edc2d47d11
Author: Ryan Blue <bl...@apache.org>
AuthorDate: Fri Jul 31 15:57:05 2020 -0700
Spark: Fix Spark 3 describe with IN predicates (#1283)
---
spark3/src/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 03d39be..03a4ea5 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.Arrays;
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 class Spark3Util {
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 <T> String sqlString(List<org.apache.iceberg.expressions.Literal<T>> 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() + "'";