Return-Path: X-Original-To: apmail-hive-commits-archive@www.apache.org Delivered-To: apmail-hive-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id F166A11B85 for ; Wed, 24 Sep 2014 16:39:32 +0000 (UTC) Received: (qmail 43743 invoked by uid 500); 24 Sep 2014 16:39:32 -0000 Delivered-To: apmail-hive-commits-archive@hive.apache.org Received: (qmail 43699 invoked by uid 500); 24 Sep 2014 16:39:32 -0000 Mailing-List: contact commits-help@hive.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: hive-dev@hive.apache.org Delivered-To: mailing list commits@hive.apache.org Received: (qmail 43688 invoked by uid 99); 24 Sep 2014 16:39:32 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 24 Sep 2014 16:39:32 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 24 Sep 2014 16:39:07 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 373A023888A6; Wed, 24 Sep 2014 16:39:05 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1627364 - in /hive/trunk: data/files/ ql/src/test/queries/clientpositive/ ql/src/test/results/clientpositive/ serde/src/java/org/apache/hadoop/hive/serde2/avro/ serde/src/test/org/apache/hadoop/hive/serde2/avro/ serde/src/test/resources/ Date: Wed, 24 Sep 2014 16:39:04 -0000 To: commits@hive.apache.org From: xuefu@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140924163905.373A023888A6@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: xuefu Date: Wed Sep 24 16:39:04 2014 New Revision: 1627364 URL: http://svn.apache.org/r1627364 Log: HIVE-8224: Support Char, Varchar in AvroSerDe (Mohit via Xuefu) Added: hive/trunk/data/files/avro_charvarchar.txt hive/trunk/ql/src/test/queries/clientpositive/avro_charvarchar.q hive/trunk/ql/src/test/results/clientpositive/avro_charvarchar.q.out Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroDeserializer.java hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerDe.java hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerializer.java hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/SchemaToTypeInfo.java hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/TypeInfoToSchema.java hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/avro/TestTypeInfoToSchema.java hive/trunk/serde/src/test/resources/avro-struct.avsc Added: hive/trunk/data/files/avro_charvarchar.txt URL: http://svn.apache.org/viewvc/hive/trunk/data/files/avro_charvarchar.txt?rev=1627364&view=auto ============================================================================== --- hive/trunk/data/files/avro_charvarchar.txt (added) +++ hive/trunk/data/files/avro_charvarchar.txt Wed Sep 24 16:39:04 2014 @@ -0,0 +1,4 @@ +a |a |k1:v1|101,x200|10,abcdef +ab|ab |k2:v123456|102,y200|10,abc +abc|abc|k3:v1234|103,200|10,a +abcdefghijklm|abcdefghijklmnop|k9:v12|109,200|10, abcdef Added: hive/trunk/ql/src/test/queries/clientpositive/avro_charvarchar.q URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/avro_charvarchar.q?rev=1627364&view=auto ============================================================================== --- hive/trunk/ql/src/test/queries/clientpositive/avro_charvarchar.q (added) +++ hive/trunk/ql/src/test/queries/clientpositive/avro_charvarchar.q Wed Sep 24 16:39:04 2014 @@ -0,0 +1,27 @@ +DROP TABLE avro_charvarchar_staging; +DROP TABLE avro_charvarchar; + +CREATE TABLE avro_charvarchar_staging ( + cchar char(5), + cvarchar varchar(10), + m1 map, + l1 array, + st1 struct +) ROW FORMAT DELIMITED +FIELDS TERMINATED BY '|' +COLLECTION ITEMS TERMINATED BY ',' +MAP KEYS TERMINATED BY ':'; + +CREATE TABLE avro_charvarchar ( + cchar char(5), + cvarchar varchar(10), + m1 map, + l1 array, + st1 struct +) STORED AS AVRO; + +LOAD DATA LOCAL INPATH '../../data/files/avro_charvarchar.txt' OVERWRITE INTO TABLE avro_charvarchar_staging; + +INSERT OVERWRITE TABLE avro_charvarchar SELECT * FROM avro_charvarchar_staging; + +SELECT * FROM avro_charvarchar; Added: hive/trunk/ql/src/test/results/clientpositive/avro_charvarchar.q.out URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/avro_charvarchar.q.out?rev=1627364&view=auto ============================================================================== --- hive/trunk/ql/src/test/results/clientpositive/avro_charvarchar.q.out (added) +++ hive/trunk/ql/src/test/results/clientpositive/avro_charvarchar.q.out Wed Sep 24 16:39:04 2014 @@ -0,0 +1,87 @@ +PREHOOK: query: DROP TABLE avro_charvarchar_staging +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE avro_charvarchar_staging +POSTHOOK: type: DROPTABLE +PREHOOK: query: DROP TABLE avro_charvarchar +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE avro_charvarchar +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE avro_charvarchar_staging ( + cchar char(5), + cvarchar varchar(10), + m1 map, + l1 array, + st1 struct +) ROW FORMAT DELIMITED +FIELDS TERMINATED BY '|' +COLLECTION ITEMS TERMINATED BY ',' +MAP KEYS TERMINATED BY ':' +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@avro_charvarchar_staging +POSTHOOK: query: CREATE TABLE avro_charvarchar_staging ( + cchar char(5), + cvarchar varchar(10), + m1 map, + l1 array, + st1 struct +) ROW FORMAT DELIMITED +FIELDS TERMINATED BY '|' +COLLECTION ITEMS TERMINATED BY ',' +MAP KEYS TERMINATED BY ':' +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@avro_charvarchar_staging +PREHOOK: query: CREATE TABLE avro_charvarchar ( + cchar char(5), + cvarchar varchar(10), + m1 map, + l1 array, + st1 struct +) STORED AS AVRO +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@avro_charvarchar +POSTHOOK: query: CREATE TABLE avro_charvarchar ( + cchar char(5), + cvarchar varchar(10), + m1 map, + l1 array, + st1 struct +) STORED AS AVRO +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@avro_charvarchar +PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/avro_charvarchar.txt' OVERWRITE INTO TABLE avro_charvarchar_staging +PREHOOK: type: LOAD +#### A masked pattern was here #### +PREHOOK: Output: default@avro_charvarchar_staging +POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/avro_charvarchar.txt' OVERWRITE INTO TABLE avro_charvarchar_staging +POSTHOOK: type: LOAD +#### A masked pattern was here #### +POSTHOOK: Output: default@avro_charvarchar_staging +PREHOOK: query: INSERT OVERWRITE TABLE avro_charvarchar SELECT * FROM avro_charvarchar_staging +PREHOOK: type: QUERY +PREHOOK: Input: default@avro_charvarchar_staging +PREHOOK: Output: default@avro_charvarchar +POSTHOOK: query: INSERT OVERWRITE TABLE avro_charvarchar SELECT * FROM avro_charvarchar_staging +POSTHOOK: type: QUERY +POSTHOOK: Input: default@avro_charvarchar_staging +POSTHOOK: Output: default@avro_charvarchar +POSTHOOK: Lineage: avro_charvarchar.cchar SIMPLE [(avro_charvarchar_staging)avro_charvarchar_staging.FieldSchema(name:cchar, type:char(5), comment:null), ] +POSTHOOK: Lineage: avro_charvarchar.cvarchar SIMPLE [(avro_charvarchar_staging)avro_charvarchar_staging.FieldSchema(name:cvarchar, type:varchar(10), comment:null), ] +POSTHOOK: Lineage: avro_charvarchar.l1 SIMPLE [(avro_charvarchar_staging)avro_charvarchar_staging.FieldSchema(name:l1, type:array, comment:null), ] +POSTHOOK: Lineage: avro_charvarchar.m1 SIMPLE [(avro_charvarchar_staging)avro_charvarchar_staging.FieldSchema(name:m1, type:map, comment:null), ] +POSTHOOK: Lineage: avro_charvarchar.st1 SIMPLE [(avro_charvarchar_staging)avro_charvarchar_staging.FieldSchema(name:st1, type:struct, comment:null), ] +PREHOOK: query: SELECT * FROM avro_charvarchar +PREHOOK: type: QUERY +PREHOOK: Input: default@avro_charvarchar +#### A masked pattern was here #### +POSTHOOK: query: SELECT * FROM avro_charvarchar +POSTHOOK: type: QUERY +POSTHOOK: Input: default@avro_charvarchar +#### A masked pattern was here #### +a a {"k1":"v1"} ["101","x200"] {"c1":10,"c2":"abcd"} +ab ab {"k2":"v1"} ["102","y200"] {"c1":10,"c2":"abc"} +abc abc {"k3":"v1"} ["103","200"] {"c1":10,"c2":"a "} +abcde abcdefghij {"k9":"v1"} ["109","200"] {"c1":10,"c2":" a"} Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroDeserializer.java URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroDeserializer.java?rev=1627364&r1=1627363&r2=1627364&view=diff ============================================================================== --- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroDeserializer.java (original) +++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroDeserializer.java Wed Sep 24 16:39:04 2014 @@ -42,7 +42,9 @@ import org.apache.avro.io.EncoderFactory import org.apache.avro.util.Utf8; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.hadoop.hive.common.type.HiveChar; import org.apache.hadoop.hive.common.type.HiveDecimal; +import org.apache.hadoop.hive.common.type.HiveVarchar; import org.apache.hadoop.hive.serde2.objectinspector.StandardUnionObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.JavaHiveDecimalObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; @@ -200,7 +202,6 @@ class AvroDeserializer { return deserializeNullableUnion(datum, fileSchema, recordSchema, columnType); } - switch(columnType.getCategory()) { case STRUCT: return deserializeStruct((GenericData.Record) datum, fileSchema, (StructTypeInfo) columnType); @@ -249,6 +250,36 @@ class AvroDeserializer { JavaHiveDecimalObjectInspector oi = (JavaHiveDecimalObjectInspector) PrimitiveObjectInspectorFactory.getPrimitiveJavaObjectInspector((DecimalTypeInfo)columnType); return oi.set(null, dec); + case CHAR: + if (fileSchema == null) { + throw new AvroSerdeException("File schema is missing for char field. Reader schema is " + columnType); + } + + int maxLength = 0; + try { + maxLength = fileSchema.getJsonProp(AvroSerDe.AVRO_PROP_MAX_LENGTH).getValueAsInt(); + } catch (Exception ex) { + throw new AvroSerdeException("Failed to obtain maxLength value for char field from file schema: " + fileSchema, ex); + } + + String str = datum.toString(); + HiveChar hc = new HiveChar(str, maxLength); + return hc; + case VARCHAR: + if (fileSchema == null) { + throw new AvroSerdeException("File schema is missing for varchar field. Reader schema is " + columnType); + } + + maxLength = 0; + try { + maxLength = fileSchema.getJsonProp(AvroSerDe.AVRO_PROP_MAX_LENGTH).getValueAsInt(); + } catch (Exception ex) { + throw new AvroSerdeException("Failed to obtain maxLength value for varchar field from file schema: " + fileSchema, ex); + } + + str = datum.toString(); + HiveVarchar hvc = new HiveVarchar(str, maxLength); + return hvc; default: return datum; } Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerDe.java URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerDe.java?rev=1627364&r1=1627363&r2=1627364&view=diff ============================================================================== --- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerDe.java (original) +++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerDe.java Wed Sep 24 16:39:04 2014 @@ -41,9 +41,13 @@ public class AvroSerDe extends AbstractS private static final Log LOG = LogFactory.getLog(AvroSerDe.class); public static final String DECIMAL_TYPE_NAME = "decimal"; + public static final String CHAR_TYPE_NAME = "char"; + public static final String VARCHAR_TYPE_NAME = "varchar"; public static final String AVRO_PROP_LOGICAL_TYPE = "logicalType"; public static final String AVRO_PROP_PRECISION = "precision"; public static final String AVRO_PROP_SCALE = "scale"; + public static final String AVRO_PROP_MAX_LENGTH = "maxLength"; + public static final String AVRO_STRING_TYPE_NAME = "string"; private ObjectInspector oi; private List columnNames; Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerializer.java URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerializer.java?rev=1627364&r1=1627363&r2=1627364&view=diff ============================================================================== --- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerializer.java (original) +++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroSerializer.java Wed Sep 24 16:39:04 2014 @@ -30,7 +30,9 @@ import org.apache.avro.generic.GenericDa import org.apache.avro.generic.GenericEnumSymbol; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.hadoop.hive.common.type.HiveChar; import org.apache.hadoop.hive.common.type.HiveDecimal; +import org.apache.hadoop.hive.common.type.HiveVarchar; import org.apache.hadoop.hive.serde2.objectinspector.ListObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.MapObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; @@ -193,6 +195,12 @@ class AvroSerializer { case DECIMAL: HiveDecimal dec = (HiveDecimal)fieldOI.getPrimitiveJavaObject(structFieldData); return AvroSerdeUtils.getBufferFromDecimal(dec, ((DecimalTypeInfo)typeInfo).scale()); + case CHAR: + HiveChar ch = (HiveChar)fieldOI.getPrimitiveJavaObject(structFieldData); + return ch.getStrippedValue(); + case VARCHAR: + HiveVarchar vc = (HiveVarchar)fieldOI.getPrimitiveJavaObject(structFieldData); + return vc.getValue(); case UNKNOWN: throw new AvroSerdeException("Received UNKNOWN primitive category."); case VOID: Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/SchemaToTypeInfo.java URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/SchemaToTypeInfo.java?rev=1627364&r1=1627363&r2=1627364&view=diff ============================================================================== --- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/SchemaToTypeInfo.java (original) +++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/SchemaToTypeInfo.java Wed Sep 24 16:39:04 2014 @@ -128,6 +128,28 @@ class SchemaToTypeInfo { return TypeInfoFactory.getDecimalTypeInfo(precision, scale); } + if (type == Schema.Type.STRING && + AvroSerDe.CHAR_TYPE_NAME.equalsIgnoreCase(schema.getProp(AvroSerDe.AVRO_PROP_LOGICAL_TYPE))) { + int maxLength = 0; + try { + maxLength = schema.getJsonProp(AvroSerDe.AVRO_PROP_MAX_LENGTH).getValueAsInt(); + } catch (Exception ex) { + throw new AvroSerdeException("Failed to obtain maxLength value from file schema: " + schema, ex); + } + return TypeInfoFactory.getCharTypeInfo(maxLength); + } + + if (type == Schema.Type.STRING && + AvroSerDe.VARCHAR_TYPE_NAME.equalsIgnoreCase(schema.getProp(AvroSerDe.AVRO_PROP_LOGICAL_TYPE))) { + int maxLength = 0; + try { + maxLength = schema.getJsonProp(AvroSerDe.AVRO_PROP_MAX_LENGTH).getValueAsInt(); + } catch (Exception ex) { + throw new AvroSerdeException("Failed to obtain maxLength value from file schema: " + schema, ex); + } + return TypeInfoFactory.getVarcharTypeInfo(maxLength); + } + return typeInfoCache.retrieve(schema); } Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/TypeInfoToSchema.java URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/TypeInfoToSchema.java?rev=1627364&r1=1627363&r2=1627364&view=diff ============================================================================== --- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/TypeInfoToSchema.java (original) +++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/avro/TypeInfoToSchema.java Wed Sep 24 16:39:04 2014 @@ -19,6 +19,7 @@ package org.apache.hadoop.hive.serde2.av import org.apache.avro.Schema; import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector; +import org.apache.hadoop.hive.serde2.typeinfo.CharTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.ListTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.MapTypeInfo; @@ -26,6 +27,7 @@ import org.apache.hadoop.hive.serde2.typ import org.apache.hadoop.hive.serde2.typeinfo.StructTypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo; import org.apache.hadoop.hive.serde2.typeinfo.UnionTypeInfo; +import org.apache.hadoop.hive.serde2.typeinfo.VarcharTypeInfo; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.node.JsonNodeFactory; @@ -105,10 +107,16 @@ public class TypeInfoToSchema { schema = Schema.create(Schema.Type.STRING); break; case CHAR: - schema = Schema.create(Schema.Type.STRING); + schema = AvroSerdeUtils.getSchemaFor("{" + + "\"type\":\"" + AvroSerDe.AVRO_STRING_TYPE_NAME + "\"," + + "\"logicalType\":\"" + AvroSerDe.CHAR_TYPE_NAME + "\"," + + "\"maxLength\":" + ((CharTypeInfo) typeInfo).getLength() + "}"); break; case VARCHAR: - schema = Schema.create(Schema.Type.STRING); + schema = AvroSerdeUtils.getSchemaFor("{" + + "\"type\":\"" + AvroSerDe.AVRO_STRING_TYPE_NAME + "\"," + + "\"logicalType\":\"" + AvroSerDe.VARCHAR_TYPE_NAME + "\"," + + "\"maxLength\":" + ((VarcharTypeInfo) typeInfo).getLength() + "}"); break; case BINARY: schema = Schema.create(Schema.Type.BYTES); Modified: hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/avro/TestTypeInfoToSchema.java URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/avro/TestTypeInfoToSchema.java?rev=1627364&r1=1627363&r2=1627364&view=diff ============================================================================== --- hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/avro/TestTypeInfoToSchema.java (original) +++ hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/avro/TestTypeInfoToSchema.java Wed Sep 24 16:39:04 2014 @@ -205,6 +205,30 @@ public class TestTypeInfoToSchema { } @Test + public void createAvroCharSchema() { + final String specificSchema = "{" + + "\"type\":\"string\"," + + "\"logicalType\":\"char\"," + + "\"maxLength\":" + CHAR_LEN + "}"; + String expectedSchema = genSchema(specificSchema); + + Assert.assertEquals("Test for char's avro schema failed", + expectedSchema, getAvroSchemaString(CHAR)); + } + + @Test + public void createAvroVarcharSchema() { + final String specificSchema = "{" + + "\"type\":\"string\"," + + "\"logicalType\":\"varchar\"," + + "\"maxLength\":" + CHAR_LEN + "}"; + String expectedSchema = genSchema(specificSchema); + + Assert.assertEquals("Test for varchar's avro schema failed", + expectedSchema, getAvroSchemaString(VARCHAR)); + } + + @Test public void createAvroListSchema() { ListTypeInfo listTypeInfo = new ListTypeInfo(); listTypeInfo.setListElementTypeInfo(STRING); Modified: hive/trunk/serde/src/test/resources/avro-struct.avsc URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/test/resources/avro-struct.avsc?rev=1627364&r1=1627363&r2=1627364&view=diff ============================================================================== --- hive/trunk/serde/src/test/resources/avro-struct.avsc (original) +++ hive/trunk/serde/src/test/resources/avro-struct.avsc Wed Sep 24 16:39:04 2014 @@ -7,8 +7,8 @@ field6:smallint,field7:int,field8:bigint field12:decimal(4,2),field13:void>", "fields":[ {"name":"field1","type":["null","string"],"doc":"string","default":null}, -{"name":"field2","type":["null","string"],"doc":"char(5)","default":null}, -{"name":"field3","type":["null","string"],"doc":"varchar(5)","default":null}, +{"name":"field2","type":["null",{"type":"string","logicalType":"char","maxLength":5}],"doc":"char(5)","default":null}, +{"name":"field3","type":["null",{"type":"string","logicalType":"varchar","maxLength":5}],"doc":"varchar(5)","default":null}, {"name":"field4","type":["null","bytes"],"doc":"binary","default":null}, {"name":"field5","type":["null","int"],"doc":"tinyint","default":null}, {"name":"field6","type":["null","int"],"doc":"smallint","default":null}, @@ -21,4 +21,4 @@ field12:decimal(4,2),field13:void>", "scale":2}],"doc":"decimal(4,2)","default":null}, {"name":"field13","type":"null","doc":"void","default":null} ] -} \ No newline at end of file +}