【发布时间】:2019-08-29 13:59:56
【问题描述】:
我有几个应用了分桶的表。当我在 SELECT 查询中预先指定存储桶/分区参数时,它可以很好地工作,但是当我从不同的表中检索我需要的存储桶值时 - 在 WITH select 语句中,Hive/Athena 似乎不再使用优化,并且而是搜索整个数据库。我想了解是否有办法正确编写查询以保持优化。
举个简单的例子,我有两张表:
表1
category | categoryid
---------+-----------
mass | 1
表2
categoryid | index | value
-----------+-------+------
1 | 0 | 15
1 | 1 | 10
1 | 2 | 7
分桶/集群列是categoryid。我有一个 category ('mass'),并想检索与我拥有的 category 对应的 value。所以我设计了这样的 SELECT:
WITH dataset AS (
SELECT categoryid
FROM Table1
WHERE category='mass'
)
SELECT index,value
FROM Table2, dataset
WHERE Table2.categoryid=dataset.categoryid
这将运行,但似乎会搜索整个数据库,因为 Hive 在开始搜索之前不知道用于分桶的 categoryid?如果我将最终的Table2.categoryid=dataset.categoryid 换成Table2.categoryid=1,那么它将只搜索db 的一部分。
那么有没有办法编写这个查询来确保 Hive 不会在第二个表中搜索比它必须搜索的更多的桶?
【问题讨论】:
标签: presto amazon-athena