配置单元外部表(镶木地板)列不可见

时间:2018-07-23 22:24:42

标签: hive hiveql parquet

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代替DOUBLEDECIMAL时,效果很好。

1 个答案:

答案 0 :(得分:0)

如您所知,使用外部表时,create table语句仅创建表的元数据。每次在后续查询中引用该表时,hive都会尝试将数据解析为请求的类型。

由于当您对列使用string类型而不是double时查询有效,所以我敢打赌您的源数据包含该列中的某些记录,这些记录不能转换为double

我将首先对数据进行概要分析,以了解是否存在异常,然后将其过滤掉。