通过“ $ path”字段查询

时间:2019-04-22 13:17:12

标签: amazon-athena

我想按表内分区下的一个文件/一组文件进行查询。 我发现当我使用“ $ path”字段时,Athena会扫描整个分区,而不是我想要的文件

是否有一种方法可以使这种查询更加有效,并且仅扫描给定的文件?类似于文件的分区修剪...

这是一个示例查询:

SELECT *
FROM my_table
WHERE day = '2019-01-01'
      AND "$path" = 's3://my-bucket/my-table/day=2019-01-01/my_file'

1 个答案:

答案 0 :(得分:0)

不。不能通过使用$path或我所知道的任何其他方法来使Athena仅扫描所需文件,而又不对表进行不同的分区。

如果这是一种常见的操作,我建议您缩小分区并更好地匹配文件,但是如果只是偶尔执行一下操作,则不必担心太多。

如果您有多种访问模式,但这不是主要的访问模式,但仍然很常见,您可以使用org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat输入格式创建一个单独的表,并使用以下方式创建1:1的分区结构:指向原始表文件的symlink.txt个文件。您可以在this StackOverflow answer(下半部分)中了解有关创建表的这种方式的更多信息-但我认为这是解决该问题的非常复杂的方式。