-1
當我使用蜂巢查詢數據時遇到以下這種情況:當在HIVE中字符串被隱式轉換爲int時會發生什麼?
select '6455983054544699410' = 6455983054544699395 ===> true
所以我想知道什麼時候字符串隱式轉換在蜂巢爲int會發生什麼?
謝謝。
當我使用蜂巢查詢數據時遇到以下這種情況:當在HIVE中字符串被隱式轉換爲int時會發生什麼?
select '6455983054544699410' = 6455983054544699395 ===> true
所以我想知道什麼時候字符串隱式轉換在蜂巢爲int會發生什麼?
謝謝。
雙方正在轉換爲加倍
hive> select '6455983054544699410' = 6455983054544699395;
WARNING: Comparing a bigint and a string may result in a loss of precision.
OK
_c0
true
hive> select cast('6455983054544699410' as double) , cast (6455983054544699395 as double);
OK
_c0 _c1
6.4559830545446994E18 6.4559830545446994E18
// For now, if a bigint is going to be cast to a double throw an error or warning
if ((oiTypeInfo0.equals(TypeInfoFactory.stringTypeInfo) && oiTypeInfo1.equals(TypeInfoFactory.longTypeInfo)) ||
(oiTypeInfo0.equals(TypeInfoFactory.longTypeInfo) && oiTypeInfo1.equals(TypeInfoFactory.stringTypeInfo))) {
String error = StrictChecks.checkTypeSafety(conf);
if (error != null) throw new UDFArgumentException(error);
console.printError("WARNING: Comparing a bigint and a string may result in a loss of precision.");
} else if ((oiTypeInfo0.equals(TypeInfoFactory.doubleTypeInfo) && oiTypeInfo1.equals(TypeInfoFactory.longTypeInfo)) ||
(oiTypeInfo0.equals(TypeInfoFactory.longTypeInfo) && oiTypeInfo1.equals(TypeInfoFactory.doubleTypeInfo))) {
String error = StrictChecks.checkTypeSafety(conf);
if (error != null) throw new UDFArgumentException(error);
console.printError("WARNING: Comparing a bigint and a double may result in a loss of precision.");
}
太謝謝你了!現在我明白了! – nofucksay