Presto 检索WITH语句中的Bucketing值以进行后续选择

Presto 检索WITH语句中的Bucketing值以进行后续选择,presto,amazon-athena,Presto,Amazon Athena,我有几张桌子用了扣子。当我在SELECT查询中预先指定bucket/partition参数时,它会非常有效,但是当我从不同的表中检索到所需的bucket值时——在WITH SELECT语句中,Hive/Athena似乎不再使用优化,而是搜索整个数据库。我想了解是否有一种方法可以正确编写查询以保持优化 举个简单的例子,我有两个表: 表1 category | categoryid ---------+----------- mass | 1 表2 categoryid | index |

我有几张桌子用了扣子。当我在SELECT查询中预先指定bucket/partition参数时,它会非常有效,但是当我从不同的表中检索到所需的bucket值时——在WITH SELECT语句中,Hive/Athena似乎不再使用优化,而是搜索整个数据库。我想了解是否有一种方法可以正确编写查询以保持优化

举个简单的例子,我有两个表:

表1

category | categoryid
---------+-----------
mass     | 1
表2

categoryid | index | value
-----------+-------+------
1          | 0     | 15
1          | 1     | 10
1          | 2     | 7
带扣/聚集柱属于类别ID。我有一个单独的类别“mass”,并希望检索与我拥有的类别对应的值。因此,我将我的SELECT设计为:

WITH dataset AS (
       SELECT categoryid
       FROM Table1
       WHERE category='mass'
     )
SELECT index,value
  FROM Table2, dataset
  WHERE Table2.categoryid=dataset.categoryid
这将运行,但似乎会搜索整个数据库,因为Hive在开始搜索之前不知道bucketing的类别ID?如果我将最终的Table2.categoryid=dataset.categoryid替换为Table2.categoryid=1,那么它将只搜索db的一部分


那么,是否有某种方法来编写此查询,以确保配置单元在第二个表中搜索的存储桶数不会超过它必须搜索的存储桶数?

Athena基于Presto。除非雅典娜在这方面做了一些修改,我认为目前还没有,否则不能在单个查询中使用

建议的解决方法:发出一个查询以收集dataset.categoryid值。将它们作为常量传递给主查询:

WITH dataset AS (
       SELECT category
       FROM Table1
       WHERE category='mass'
     )
SELECT index,value
  FROM Table2, dataset
  WHERE Table2.categoryid = dataset.categoryid
    AND Table2.categoryid IN ( <all possible values> );

普雷斯托社区目前正在进行的额外工作将改善这一点。

啊,这是基于普雷斯托的,我的错误。谢谢你的回答——虽然我希望这只是我做错了什么,但很高兴听到的是答案只是它还没有实现。看到github问题也很好-我们会关注这一点。谢谢你!