aws athena区分大小写orc.column.index.access=false?

yptwkmov  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(234)

我在雅典娜创建了一个表,下面是配置

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 引擎尝试读取具有区分大小写约束的列名?

ne5o7dgx

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

相关问题