我在雅典娜创建了一个表,下面是配置
CREATE EXTERNAL TABLE `extern` (`FirstName` STRING, `LastName` STRING, `Email` STRING, `Phone` STRING, `AddressLine1` STRING, `City` STRING, `State` STRING, `PostalCode` STRING,
`time_on_page` DECIMAL(10,3), `page` STRING, `login_time` TIMESTAMP) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
WITH SERDEPROPERTIES ('orc.column.index.access'='false')
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION 's3://location/' tblproperties ("orc.compress"="ZLIB")
当我问起 select * from extern
我得到所有列的空值,除了 time_on_page
, page
以及 login_time
. 但是,如果我使用 ('orc.column.index.access'='true')
. orc文件中列名的模式与create语句中定义的内容完全相同。
File Version: 0.12 with ORC_135
Rows: 13559
Compression: ZLIB
Compression size: 131072
Type: struct<FirstName:string,LastName:string,Email:string,Phone:string,AddressLine1:string,City:string,State:string,PostalCode:string,time_on_page:decimal(10,3),page:string,login_time:timestamp>
问题是,有没有可能 orc.column.index.access=false
引擎尝试读取具有区分大小写约束的列名?
1条答案
按热度按时间ne5o7dgx1#
显然,presto版本的amazon是基于prestodb的,在本文撰写之时,prestodb上似乎没有这个特性;然而,prestosql似乎从312版开始就有了这种支持(参考:https://github.com/prestosql/presto/issues/802). 解决方案是确保orc文件中的模式使用小写列名,以便与hive metastore中的名称匹配(这些名称总是小写的)。
presto db的调试代码:https://github.com/prestodb/presto/blob/6647e13f64883f7cfa89221d91b981bcc3a57618/presto-hive/src/main/java/com/facebook/presto/hive/hiveutil.java#l984https://github.com/prestodb/presto/blob/95bcb3947cad1570e19a0adaebc58009aa362ada/presto-orc/src/main/java/com/facebook/presto/orc/orcreader.java#l130