从Hive外部表中选择数据时,我遇到了奇怪的问题。
数据以镶木地板文件格式从SQL Server卸载,而SQL Server select子句中的一个字段(即金额字段并转换为浮点型)以外的所有其他字段均为“字符串”字段。
选择
将(field_1转换为float)转换为field_1,
field_2,
field_3
从表中;
Hive DDL-
创建外部表hive_tbl_1(
field_1浮动,
field_2字符串,
field_3字符串
)
PARTITIONED BY(data_date字符串)
行格式序列
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
存储为INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
输出格式
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
位置
'hdfs:// mypath / data / file1 / 20181220'
TBLPROPERTIES('PARQUET.COMPRESS'='GZIP')
当我从该表中选择数据时,它会引发错误-
“不包含请求的字段:可选的double field_1”
请注意,只要字段在select语句中“ cast”到“ varchar”并在Hive DDL中创建为“ string”,其他所有表都可以正常工作并能够显示数据。我也尝试了其他数字类型,所有这些似乎在Hive中都存在问题。
为什么float类型会产生此问题以及如何解决?毕竟,我们不能总是总是将所有字段都强制转换为“ varchar”,否则在许多业务场景中也不会产生正确的结果。