[
https://issues.apache.org/jira/browse/HIVE-1287?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12851166#action_12851166
]
Arvind Prabhakar commented on HIVE-1287:
----------------------------------------
I think I understand your point of view. Let me explain mine:
Right now there is no consistent type checking. What we have is implicit type
conversion where possible - such as converting a struct to string but not the
other way around. In other places this implicit type conversion leads to
internal error. In case of struct to struct conversion however the check is
rigid to the field names. This is not consistent.
My suggestion is to provide type equivalence semantics within the query
language framework. Doing this will help in the following ways:
- Implicit type conversion would not be allowed and would require explicit CAST
to convert to another type.
- The query compiler would ensure that the data types are equivalent and
therefore allow data to flow without having to invoke any UDF for every row.
This should help us gain performance relative to the current approach.
- Providing type equivalence checks will also be fundamental to building
higher-level UD*Fs which would otherwise have to deal with cast semantics.
> Struct datatype should not use field names for type equivalence.
> ----------------------------------------------------------------
>
> Key: HIVE-1287
> URL: https://issues.apache.org/jira/browse/HIVE-1287
> Project: Hadoop Hive
> Issue Type: Bug
> Components: Query Processor
> Environment: Mac OS X (10.6.2) Java SE 6 ( 1.6.0_17)
> Reporter: Arvind Prabhakar
>
> The field names for {{Struct}} types are currently being matched for testing
> type equivalence. This is readily seen by running the following example:
> {noformat}
> hive> create table source ( foo struct < x : string > );
> OK
> Time taken: 3.094 seconds
> hive> load data local inpath '/path/to/sample/data.txt' overwrite into table
> source;
> Copying data from file:/path/to/sample/data.txt
> Loading data to table source
> OK
> Time taken: 0.593 seconds
> hive> create table sink ( bar struct < y : string >);
> OK
> Time taken: 0.11 seconds
> hive> insert overwrite table sink select foo from source;
> FAILED: Error in semantic analysis: line 1:23 Cannot insert into target table
> because column number/types are different sink: Cannot convert column 0
> from struct<x:string> to struct<y:string>.
> {noformat}
> Since both {{soruce.foo}} and {{sink.bar}} are similar in definition with
> only field names being different, data movement between these two should be
> allowed.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.