除product_price
外,所有字段均可查询。该列显示在表的列列表中。查询会产生这个奇怪的错误:
Failed with exception java.io.IOException:java.lang.IllegalStateException: Group type [message schema {
optional binary product_name (UTF8);
optional binary product_category (UTF8);
optional double product_price;
optional binary purchase_date (UTF8);
optional binary client_ip_address (UTF8);
optional binary pdate;
}
] does not contain requested field: optional double product_price
表是以parquet
格式存储的分区表。
SHOW CREATE TABLE PURCHASES
:
CREATE EXTERNAL TABLE `purchases`(
`product_name` string,
`product_category` string,
`product_price` double,
`purchase_date` string,
`client_ip_address` string)
PARTITIONED BY (
`pdate` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
'hdfs://quickstart.cloudera:8020/data'
TBLPROPERTIES (
'transient_lastDdlTime'='1532388930')
重要提示:使用STRING
代替DOUBLE
或DECIMAL
时,效果很好。
答案 0 :(得分:0)
如您所知,使用外部表时,create table
语句仅创建表的元数据。每次在后续查询中引用该表时,hive都会尝试将数据解析为请求的类型。
由于当您对列使用string
类型而不是double
时查询有效,所以我敢打赌您的源数据包含该列中的某些记录,这些记录不能转换为double
。
我将首先对数据进行概要分析,以了解是否存在异常,然后将其过滤掉。