【发布时间】:2018-04-26 10:38:23
【问题描述】:
我对 AWS EMR 非常陌生。我已经启动并运行了 Hive,并且一直在 S3 中查询外部表,没有任何问题。我现在已将 Presto 安装到 EMR 集群上,这似乎已启动并正在运行,并且可以读取 Hive 元数据库。但是,我运行的每个查询都返回列标题,但实际上不返回任何列(下面的查询)。
presto:default> select count(*) from patrequests;
_col0
-------
0
(1 row)
Query 20171113_163811_00033_vdw6c, FINISHED, 1 node
Splits: 17 total, 17 done (100.00%)
0:00 [0 rows, 0B] [0 rows/s, 0B/s]
Hive 中的相同查询运行良好:
hive> select * from patrequests limit 10;
OK
2017-10-01T00:00:18.6772628Z 779 ***** ***** ***** ***** 2017 10
Time taken: 2.876 seconds, Fetched: 10 row(s)
数据以 JSON 格式存储在 S3 存储桶中 - 无嵌套。
非常感谢任何帮助。
谢谢
【问题讨论】:
-
Hive 有一个 MetaStore 服务,由 database 支持——但没有 MetaBase 这样的东西...
-
当心:一些 #!\&* 多年前就决定,Hive 应该为所有
count(*)查询提供错误的结果。不要问我为什么。但它是通过使用“统计数据”来完成的,即在过去某个时间点看似合理的值,但当你现在运行查询时肯定会离谱。 OK,返回错误的结果很快,但是是错误的。 -
我的 2 美分:试试
select count(*) from WTF where ID is not null之类的东西(不能使用粗略的“统计”),看看查询是否真的获取数据来计算有效结果...... -
对不起,我指的是 Presto 可以看到的 Hive Metastore。但是,问题不在于 Hive,而在于 Presto 不返回结果。我尝试在非聚合选择上运行,但它仍然没有返回任何内容。会不会是 Presto 不喜欢的基础数据的问题?