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

kq0g1dla  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(434)

所有字段都可以查询,除了 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 ,工作正常。

u59ebvdq

u59ebvdq1#

如您所知,在使用外部表时 create table 语句只为表创建元数据。每次在后续查询中引用表时,hive都会尝试将数据解析为请求的类型。
因为使用 string 为列键入,而不是在使用时 double -我敢打赌,您的源数据在该列中包含一些无法转换为 double .
我会先对数据做一个概要,以了解是否有任何异常,然后过滤掉它们。

相关问题