所有字段都可以查询,除了 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
,工作正常。
1条答案
按热度按时间u59ebvdq1#
如您所知,在使用外部表时
create table
语句只为表创建元数据。每次在后续查询中引用表时,hive都会尝试将数据解析为请求的类型。因为使用
string
为列键入,而不是在使用时double
-我敢打赌,您的源数据在该列中包含一些无法转换为double
.我会先对数据做一个概要,以了解是否有任何异常,然后过滤掉它们。