通过AWS Athena存储桶表中的多个值查询

时间:2019-10-15 10:47:53

标签: sql amazon-athena

我有一个存储桶的表,我想从该表中查询多个值。 这是一个示例:

SELECT *
FROM my_bucketed_table
WHERE bucketed_column IN (value1, value2)

结果是对表进行全面扫描,而不是使用索引。

当我使用并集一次查询每个值时,就扫描数据而言,它按预期工作:

SELECT *
FROM my_bucketed_table
WHERE bucketed_column = value1
UNION
SELECT *
FROM my_bucketed_table
WHERE bucketed_column = value2

但是我希望列表是动态的,所以这种解决方案对我来说还不够好。

我希望使用IN运算符或另一个表的JOIN扫描的数据与UNION解决方案中的数据相同

2 个答案:

答案 0 :(得分:2)

发表评论的时间有点长。

我认为您指的是分区修剪,它与“使用索引”有点不同。您希望查询仅读取相关分区。

分区修剪非常棘手。基本问题是查询在开始执行查询之前需要知道要读取哪些数据。通常,这需要在分区列上进行显式比较。

标识正确的分区应该与=>>=<<=一起正常工作。使用innot in可能会变得更加复杂。当您在一个表上使用join并且未在联接中显式包括两个表的分区时,它可能无法工作。

答案 1 :(得分:0)

您可以尝试如下所示,这可能有助于使用索引

SELECT *
FROM my_bucketed_table
WHERE bucketed_column = 0000 or bucketed_column IN (value1, value2)

假设您的列中没有任何值0000