This is an automated email from the ASF dual-hosted git repository.
srinivasulu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/samza.git
The following commit(s) were added to refs/heads/master by this push:
new 71d1346 Support for complex schema in Samza SQL shell for describe
command (#1101)
71d1346 is described below
commit 71d134643af7e34b8fa41425ab7978425ccf5b57
Author: Srinivasulu Punuru <[email protected]>
AuthorDate: Wed Jul 10 15:51:09 2019 -0700
Support for complex schema in Samza SQL shell for describe command (#1101)
* Support for complex schema in Samza SQL shell for describe command
* Adding Udf description to UdfMetadata
* Adding the returnType to the UdfMetadata
---
.../org/apache/samza/sql/client/cli/CliShell.java | 33 +++++++++++++++++++++-
.../samza/sql/impl/ConfigBasedUdfResolver.java | 4 +--
.../apache/samza/sql/interfaces/UdfMetadata.java | 24 ++++++++++++++--
3 files changed, 56 insertions(+), 5 deletions(-)
diff --git
a/samza-sql-shell/src/main/java/org/apache/samza/sql/client/cli/CliShell.java
b/samza-sql-shell/src/main/java/org/apache/samza/sql/client/cli/CliShell.java
index a726cf1..6212d9b 100755
---
a/samza-sql-shell/src/main/java/org/apache/samza/sql/client/cli/CliShell.java
+++
b/samza-sql-shell/src/main/java/org/apache/samza/sql/client/cli/CliShell.java
@@ -19,9 +19,12 @@
package org.apache.samza.sql.client.cli;
+import java.util.stream.Collectors;
import org.apache.samza.sql.client.interfaces.*;
import org.apache.samza.sql.client.util.CliException;
import org.apache.samza.sql.client.util.CliUtil;
+import org.apache.samza.sql.schema.SamzaSqlFieldType;
+import org.apache.samza.sql.schema.SqlFieldSchema;
import org.apache.samza.sql.schema.SqlSchema;
import org.jline.reader.EndOfFileException;
import org.jline.reader.LineReader;
@@ -736,7 +739,7 @@ class CliShell {
for (int i = 0; i < rowCount; ++i) {
SqlSchema.SqlField sqlField = schema.getFields().get(i);
String field = sqlField.getFieldName();
- String type = sqlField.getFieldSchema().getFieldType().toString();
+ String type = getFieldDisplayValue(sqlField.getFieldSchema());
int fieldLen = field.length();
int typeLen = type.length();
int fieldStartIdx = 0, typeStartIdx = 0;
@@ -777,6 +780,34 @@ class CliShell {
return lines;
}
+ private String getFieldDisplayValue(SqlFieldSchema fieldSchema) {
+ if (!isComplexField(fieldSchema.getFieldType())) {
+ return fieldSchema.getFieldType().toString();
+ }
+ SamzaSqlFieldType fieldType = fieldSchema.getFieldType();
+ switch (fieldType) {
+ case ARRAY:
+ return String.format("ARRAY(%s)",
getFieldDisplayValue(fieldSchema.getElementSchema()));
+ case MAP:
+ return String.format("MAP(%s, %s)",
SamzaSqlFieldType.STRING.toString(),
+ getFieldDisplayValue(fieldSchema.getValueScehma()));
+ case ROW:
+ String rowDisplayValue = fieldSchema.getRowSchema()
+ .getFields()
+ .stream()
+ .map(f -> getFieldDisplayValue(f.getFieldSchema()))
+ .collect(Collectors.joining(","));
+ return String.format("ROW(%s)", rowDisplayValue);
+ default:
+ throw new UnsupportedOperationException("Unknown field type " +
fieldType);
+ }
+ }
+
+ private boolean isComplexField(SamzaSqlFieldType fieldtype) {
+ return fieldtype == SamzaSqlFieldType.ARRAY || fieldtype ==
SamzaSqlFieldType.MAP
+ || fieldtype == SamzaSqlFieldType.ROW;
+ }
+
// Trims: leading spaces; trailing spaces and ";"s
private String trimCommand(String command) {
if (CliUtil.isNullOrEmpty(command))
diff --git
a/samza-sql/src/main/java/org/apache/samza/sql/impl/ConfigBasedUdfResolver.java
b/samza-sql/src/main/java/org/apache/samza/sql/impl/ConfigBasedUdfResolver.java
index 1319a85..2b83b60 100644
---
a/samza-sql/src/main/java/org/apache/samza/sql/impl/ConfigBasedUdfResolver.java
+++
b/samza-sql/src/main/java/org/apache/samza/sql/impl/ConfigBasedUdfResolver.java
@@ -105,8 +105,8 @@ public class ConfigBasedUdfResolver implements UdfResolver {
String udfName = sqlUdf.name();
for (Map.Entry<SamzaSqlUdfMethod, Method> udfMethod :
udfMethods.entrySet()) {
List<SamzaSqlFieldType> params =
Arrays.asList(udfMethod.getKey().params());
- udfs.add(new UdfMetadata(udfName, udfMethod.getValue(),
udfConfig.subset(udfName + "."), params,
- udfMethod.getKey().disableArgumentCheck()));
+ udfs.add(new UdfMetadata(udfName, sqlUdf.description(),
udfMethod.getValue(), udfConfig.subset(udfName + "."), params,
+ udfMethod.getKey().returns(),
udfMethod.getKey().disableArgumentCheck()));
}
}
}
diff --git
a/samza-sql/src/main/java/org/apache/samza/sql/interfaces/UdfMetadata.java
b/samza-sql/src/main/java/org/apache/samza/sql/interfaces/UdfMetadata.java
index 4adb5ea..9288ce7 100644
--- a/samza-sql/src/main/java/org/apache/samza/sql/interfaces/UdfMetadata.java
+++ b/samza-sql/src/main/java/org/apache/samza/sql/interfaces/UdfMetadata.java
@@ -32,20 +32,33 @@ import org.apache.samza.sql.schema.SamzaSqlFieldType;
public class UdfMetadata {
private final String name;
+
+ private final String description;
private final Method udfMethod;
private final Config udfConfig;
private final boolean disableArgCheck;
private final List<SamzaSqlFieldType> arguments;
- public UdfMetadata(String name, Method udfMethod, Config udfConfig,
List<SamzaSqlFieldType> arguments,
- boolean disableArgCheck) {
+ private final SamzaSqlFieldType returnType;
+
+ public UdfMetadata(String name, String description, Method udfMethod, Config
udfConfig, List<SamzaSqlFieldType> arguments,
+ SamzaSqlFieldType returnType, boolean disableArgCheck) {
this.name = name;
+ this.description = description;
this.udfMethod = udfMethod;
this.udfConfig = udfConfig;
this.arguments = arguments;
+ this.returnType = returnType;
this.disableArgCheck = disableArgCheck;
}
+ /**
+ * @return returns the returnType of the Samza SQL UDF.
+ */
+ public SamzaSqlFieldType getReturnType() {
+ return returnType;
+ }
+
public Config getUdfConfig() {
return udfConfig;
}
@@ -65,6 +78,13 @@ public class UdfMetadata {
}
/**
+ * @return Returns the description of the udf.
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
* @return Returns the list of arguments that the udf should take.
*/
public List<SamzaSqlFieldType> getArguments() {