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