hive中执行select cast(‘20’ as bigint union all select cast(‘20’ as decimal(30,8) 结果值是浮点型,目标表数据类型是bigint,数据导入到目标表
时间: 2023-12-10 22:36:50 浏览: 23
在Hive中,如果将一个DECIMAL类型的值与一个BIGINT类型的值进行UNION操作,那么结果会被当作DOUBLE类型处理。因此,当执行如下语句时:
```
select cast('20' as bigint) union all select cast('20' as decimal(30,8));
```
结果会变成一个浮点型,具体数值为20.0。如果将该结果导入到目标表中,由于目标表的数据类型是BIGINT,因此会将20.0强制转换为20,最终存储到目标表中的数据是整数类型20。
相关问题
SELECT CAST('12345678901234567890' AS BIGINT)为什么会输出NULL
在Hive中,将字符串类型转换为大整数类型时,如果字符串的值超出了大整数类型的取值范围,会返回NULL值。因此,当执行以下语句时:
```sql
SELECT CAST('12345678901234567890' AS BIGINT);
```
会返回NULL值,因为字符串'12345678901234567890'的值太大,超出了BIGINT类型的取值范围(-9223372036854775808到9223372036854775807),无法转换为BIGINT类型。如果要将字符串类型转换为大整数类型,需要确保字符串的值在BIGINT类型的取值范围内,例如:
```sql
SELECT CAST('1234567890' AS BIGINT);
```
该语句可以正确地将字符串'1234567890'转换为BIGINT类型,结果为1234567890。
SELECT CAST(col1 AS BIGINT)为什么会输出NULL,已知col1并不大
在Hive中,将字符串类型转换为大整数类型时,如果字符串的值超出了大整数类型的取值范围,会返回NULL值。除此之外,还有一个常见的原因是字符串类型中含有非数字字符,例如空格、逗号等。
因此,如果执行以下语句时:
```sql
SELECT CAST(col1 AS BIGINT) FROM mytable;
```
其中的col1列包含非数字字符或者超出BIGINT类型取值范围的字符串,会返回NULL值。
如果col1列中确实包含非数字字符,可以使用正则表达式去除非数字字符,例如:
```sql
SELECT CAST(REGEXP_REPLACE(col1, '[^\\d]+', '') AS BIGINT) FROM mytable;
```
该语句中使用了Hive的REGEXP_REPLACE函数,将col1列中的非数字字符替换为空字符串,然后再将结果转换为BIGINT类型。这样就可以避免将非数字字符转换为BIGINT类型导致的NULL值问题。