Presto查询引发错误 - 执行SELECT *

时间:2016-11-17 21:38:36

标签: hadoop hive parquet presto

我正在从S3加载到我的Hive数据仓库中的镶木地板文件,该数据仓库在EMR机器内运行:

Release: emr-5.1.0

Hadoop distribution: Amazon 2.7.3

Applications: Hive 2.1.0, Spark 2.0.1, Presto 0.152.3)

我可以使用以下方法轻松查询配置单元内的结果:

select * from table_a

但是,当我使用presto尝试相同的查询时,我收到以下错误:

ERROR   remote-task-callback-57 com.facebook.presto.execution.StageStateMachine Stage 20161117_211631_00018_29xwg.1 failed
java.lang.NullPointerException
    at com.facebook.presto.spi.RecordPageSource.getNextPage(RecordPageSource.java:124)
    at com.facebook.presto.operator.TableScanOperator.getOutput(TableScanOperator.java:246)
    at com.facebook.presto.operator.Driver.processInternal(Driver.java:378)
    at com.facebook.presto.operator.Driver.processFor(Driver.java:301)
    at com.facebook.presto.execution.SqlTaskExecution$DriverSplitRunner.processFor(SqlTaskExecution.java:622)
    at com.facebook.presto.execution.TaskExecutor$PrioritizedSplitRunner.process(TaskExecutor.java:529)
    at com.facebook.presto.execution.TaskExecutor$Runner.run(TaskExecutor.java:665)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

我知道我的presto能够查询hive表,因为我可以这样做:

select count(1) from table_a

select column_name from table_a

我的第一次选择有什么问题?

1 个答案:

答案 0 :(得分:0)

我发现了问题。

当我定义我的配置单create table时,我添加了一个在我的文件中不存在的字段(它将很快存在)。

使用Presto我能够select column_name from table_a表格中的所有字段,不包括丢失的字段(解释为什么select * from table_a无效)。

Hive通过在查询结果中填入null值来处理文件中缺少的参数。 Presto尝试找到该字段,并引发NullPointerException

机器版本: Hive 2.1.0, Spark 2.0.1, Presto 0.152.3

编辑:

添加这两个标志(一个用于orc,另一个用于镶木地板):

hive.parquet.use-column-names = true
hive.orc.use-column-names = true

hive.properties

/etc/presto/conf/catalog/hive.properties #path on emr