[ https://issues.apache.org/jira/browse/HIVE-7868?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14125879#comment-14125879 ]
Brock Noland commented on HIVE-7868: ------------------------------------ This looks good! Using the following tables: {noformat} create table test_avro (c1 string, c2 char(10), c3 varchar(10)) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' TBLPROPERTIES ( 'avro.schema.literal'='{"type":"record","name":"test_avro","namespace":"default","fields":[{"name":"c1","type":["null","string"],"default":null},{"name":"c2","type":["null","string"],"default":null},{"name":"c3","type":["null","string"],"default":null}]}'); create table test_avro (c1 string, c2 char(10), c3 varchar(10)) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' TBLPROPERTIES ( 'avro.schema.url'='hdfs://localhost:9000/tmp/schema.avsc'); {noformat} * Creating with bad avro.schema.literal: {noformat} FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: MetaException(message:org.apache.hadoop.hive.serde2.SerDeException Encountered exception determining schema. Returning signal schema to indicate problem: No type: {}) {noformat} * Creating with bad avro.schema.url: {noformat} FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: MetaException(message:org.apache.hadoop.hive.serde2.SerDeException Encountered AvroSerdeException determining schema. Returning signal schema to indicate problem: Unable to read schema from given path: hdfs://localhost:8020/tmp/schema.avsc) {noformat} * Setting bad avro.schema.url: {noformat} FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hive.serde2.SerDeException Encountered AvroSerdeException determining schema. Returning signal schema to indicate problem: Unable to read schema from given path: hdfs://localhost:9000/tmp/schema.avsc {noformat} * Setting bad avro.schema.literal {noformat} FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hive.serde2.SerDeException Encountered exception determining schema. Returning signal schema to indicate problem: java.io.EOFException: No content to map to Object due to end of input {noformat} * Fixing bad URL schema works. * Fixing bad literal schema works. I think we should do one more item, in the describe table code here: https://github.com/apache/hive/blob/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java#L3063 we should check for config errors and print them as opposed to describing the table. Thanks!! > AvroSerDe error handling could be improved > ------------------------------------------ > > Key: HIVE-7868 > URL: https://issues.apache.org/jira/browse/HIVE-7868 > Project: Hive > Issue Type: Improvement > Reporter: Brock Noland > Assignee: Ferdinand Xu > Attachments: HIVE-7868.patch > > > When an Avro schema is invalid, AvroSerDe returns an error message instead of > throwing an exception. This is described in > {{AvroSerdeUtils.determineSchemaOrReturnErrorSchema}}: > {noformat} > /** > * Attempt to determine the schema via the usual means, but do not throw > * an exception if we fail. Instead, signal failure via a special > * schema. This is used because Hive calls init on the serde during > * any call, including calls to update the serde properties, meaning > * if the serde is in a bad state, there is no way to update that state. > */ > {noformat} > I believe we should find a way to provide a better experience to our users. -- This message was sent by Atlassian JIRA (v6.3.4#6332)