[
https://issues.apache.org/jira/browse/BEAM-6701?focusedWorklogId=200796&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-200796
]
ASF GitHub Bot logged work on BEAM-6701:
----------------------------------------
Author: ASF GitHub Bot
Created on: 19/Feb/19 18:13
Start Date: 19/Feb/19 18:13
Worklog Time Spent: 10m
Work Description: amaliujia commented on pull request #7865: [BEAM-6701]
Add logical types to schema
URL: https://github.com/apache/beam/pull/7865#discussion_r258165107
##########
File path:
sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/LogicalTypes.java
##########
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.beam.sdk.schemas;
+
+import static
org.apache.beam.vendor.guava.v20_0.com.google.common.base.Preconditions.checkArgument;
+
+import java.util.Arrays;
+import org.apache.beam.sdk.schemas.Schema.FieldType;
+import org.apache.beam.sdk.schemas.Schema.LogicalType;
+
+/** A collection of common {@link Schema.LogicalType} classes. */
+public class LogicalTypes {
+ /** A base class for LogicalTypes that use the same Java type as the
underlying base type. */
+ public abstract static class PassThroughLogicalType<T> implements
LogicalType<T, T> {
+ private final String identifier;
+ private final FieldType fieldType;
+
+ protected PassThroughLogicalType(String identifier, FieldType fieldType) {
+ this.identifier = identifier;
+ this.fieldType = fieldType;
+ }
+
+ @Override
+ public String getIdentifier() {
+ return identifier;
+ }
+
+ @Override
+ public FieldType getBaseType() {
+ return fieldType;
+ }
+
+ @Override
+ public T toBaseType(T input) {
+ return input;
+ }
+
+ @Override
+ public T toInputType(T base) {
+ return base;
+ }
+ }
+
+ /** A LogicalType representing a fixed-size byte array. */
+ public static class FixedBytes implements LogicalType<byte[], byte[]> {
+ public static final String IDENTIFIER = "FixedBytes";
+ private final int byteArraySize;
+
+ private FixedBytes(int byteArraySize) {
+ this.byteArraySize = byteArraySize;
+ }
+
+ public static FixedBytes of(int byteArraySize) {
+ return new FixedBytes(byteArraySize);
+ }
+
+ public int getLength() {
+ return byteArraySize;
+ }
+
+ @Override
+ public String getIdentifier() {
+ return IDENTIFIER;
+ }
+
+ @Override
+ public String getArgument() {
+ return Integer.toString(byteArraySize);
+ }
+
+ @Override
+ public FieldType getBaseType() {
+ return FieldType.BYTES;
+ }
+
+ @Override
+ public byte[] toBaseType(byte[] input) {
+ checkArgument(input.length == byteArraySize);
+ return input;
+ }
+
+ @Override
+ public byte[] toInputType(byte[] base) {
Review comment:
Gotcha. Thanks for explanation. So this two functions are util functions for
conversions.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
Issue Time Tracking
-------------------
Worklog Id: (was: 200796)
Time Spent: 2h 40m (was: 2.5h)
> Create LogicalType for Schema fields
> ------------------------------------
>
> Key: BEAM-6701
> URL: https://issues.apache.org/jira/browse/BEAM-6701
> Project: Beam
> Issue Type: Sub-task
> Components: sdk-java-core
> Reporter: Reuven Lax
> Assignee: Reuven Lax
> Priority: Major
> Time Spent: 2h 40m
> Remaining Estimate: 0h
>
> This will allow users to create their own logical types to store in schema
> fields, backed by one of the fundamental schema field types. Today SQL hacks
> on top of the field metadata to distinguish its types. LogicalTypes would
> allow for a more principled way of doing this.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)