Also.

Refer section "*Allowed Implicit Conversions*" on

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types


It had given a try on joining tables on STRING and INT column , it should
work through implicit conversions.



Regards
Sanjiv Singh
Mob :  +091 9990-447-339



On Mon, May 4, 2015 at 1:26 PM, [email protected] <[email protected]>
wrote:

> IF join on A.col1  == B.col2
> col1 is string
> col2 is bigint
>
> The automatic conversion is support? All cast to string?
>
> ------------------------------
> [email protected]
>
>
> *From:* Gopal Vijayaraghavan <[email protected]>
> *Date:* 2015-05-04 16:10
> *To:* user <[email protected]>
> *CC:* [email protected]
> *Subject:* Re: join on different data type
>
> > If A.col1 is of DOUBLE type,
> > but B.col2 is of BIGINT,
>
>
> The automatic conversion is not acceptable according to the java language
> spec (section 5.1.2)
>
> https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.2
>
>
> Also to be noted here is that in general, that even if you cast, you might
> be casting the wrong way around.
>
> Because joins on double columns will give incorrect (rather unintended,
> but IEEE 754 correct) results when comparing byte serialized
> representations - because of the nearly-equal property epsilon.
>
> Easiest way to demonstrate this is to try the simplest off-by-epsilon case
> (say, in python)
>
> >>> import sys
> >>> 0.1 + 0.2
> 0.30000000000000004
> >>> 0.1 + 0.2 > 0.3
>
> True
> >>>
> >>> ((0.1+0.2) - 0.3) < sys.float_info.epsilon
> True
>
>
> So if the RHS produced ETL values by sum() and the LHS was produced by
> parsing log text, the JOIN will output zero rows.
>
> If you want to do equijoins like that, the only valid case is to cast both
> to fixed precision bigints (say, convert all dollars to cents, by *100),
> not both to double.
>
> Cheers,
> Gopal
>
>
>
>

Reply via email to