[ 
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.

Reply via email to