You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by ro...@apache.org on 2020/06/16 00:41:36 UTC
[beam] branch master updated: Add zetaSqlValueToJavaObject() with
unknown target type
This is an automated email from the ASF dual-hosted git repository.
robinyqiu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git
The following commit(s) were added to refs/heads/master by this push:
new 8e74c0b Add zetaSqlValueToJavaObject() with unknown target type
new 232c878 Merge pull request #11957 from robinyqiu/fixit
8e74c0b is described below
commit 8e74c0bd165da9d458d9f56f7f504b8fbaa2742d
Author: Yueyang Qiu <ro...@gmail.com>
AuthorDate: Thu Jun 11 23:26:55 2020 -0700
Add zetaSqlValueToJavaObject() with unknown target type
---
.../sdk/extensions/sql/zetasql/ZetaSqlUtils.java | 50 +++++++++++++++++++++-
1 file changed, 49 insertions(+), 1 deletion(-)
diff --git a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlUtils.java b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlUtils.java
index b041b18..28340e9 100644
--- a/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlUtils.java
+++ b/sdks/java/extensions/sql/zetasql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/ZetaSqlUtils.java
@@ -196,7 +196,55 @@ public final class ZetaSqlUtils {
}
}
- // Value conversion: ZetaSQL => Beam
+ // Type conversion: ZetaSQL => Beam
+ public static FieldType zetaSqlTypeToBeamFieldType(Type type) {
+ switch (type.getKind()) {
+ case TYPE_INT64:
+ return FieldType.INT64.withNullable(true);
+ case TYPE_DOUBLE:
+ return FieldType.DOUBLE.withNullable(true);
+ case TYPE_BOOL:
+ return FieldType.BOOLEAN.withNullable(true);
+ case TYPE_STRING:
+ return FieldType.STRING.withNullable(true);
+ case TYPE_BYTES:
+ return FieldType.BYTES.withNullable(true);
+ case TYPE_DATE:
+ return FieldType.logicalType(SqlTypes.DATE).withNullable(true);
+ case TYPE_TIMESTAMP:
+ return FieldType.DATETIME.withNullable(true);
+ case TYPE_ARRAY:
+ return zetaSqlElementTypeToBeamArrayType(type.asArray().getElementType());
+ case TYPE_STRUCT:
+ return zetaSqlStructTypeToBeamRowType(type.asStruct());
+ default:
+ throw new UnsupportedOperationException("Unknown ZetaSQL type: " + type.getKind());
+ }
+ }
+
+ private static FieldType zetaSqlElementTypeToBeamArrayType(Type elementType) {
+ return FieldType.array(zetaSqlTypeToBeamFieldType(elementType)).withNullable(true);
+ }
+
+ private static FieldType zetaSqlStructTypeToBeamRowType(StructType structType) {
+ return FieldType.row(
+ structType.getFieldList().stream()
+ .map(ZetaSqlUtils::zetaSqlStructFieldToBeamField)
+ .collect(Schema.toSchema()))
+ .withNullable(true);
+ }
+
+ private static Field zetaSqlStructFieldToBeamField(StructField structField) {
+ return Field.of(structField.getName(), zetaSqlTypeToBeamFieldType(structField.getType()));
+ }
+
+ // Value conversion: ZetaSQL => Beam (target Beam type unknown)
+ public static Object zetaSqlValueToJavaObject(Value value, boolean verifyValues) {
+ return zetaSqlValueToJavaObject(
+ value, zetaSqlTypeToBeamFieldType(value.getType()), verifyValues);
+ }
+
+ // Value conversion: ZetaSQL => Beam (target Beam type known)
public static Object zetaSqlValueToJavaObject(
Value value, FieldType fieldType, boolean verifyValues) {
if (value.isNull()) {